From 90fd0ff6b6cf97c8affcb78d68302ac48aa75863 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Mon, 21 Jan 2019 15:08:22 +0100 Subject: [PATCH 1/4] Replace Vuetify with Bulma Signed-off-by: Thomas Citharel Remove vuetify and add Bulma Signed-off-by: Thomas Citharel --- js/Makefile | 2 +- js/package-lock.json | 936 ++++++++++++------ js/package.json | 7 +- js/patches/easygettext+2.7.0.patch | 41 + js/public/index.html | 36 +- js/src/App.vue | 222 +---- js/src/components/Account/Account.vue | 213 ---- js/src/components/Account/Identities.vue | 133 --- js/src/components/Account/Login.vue | 151 --- js/src/components/Account/PasswordReset.vue | 123 --- js/src/components/Account/Register.vue | 185 ---- js/src/components/Account/RegisterAvatar.vue | 12 - .../components/Account/ResendConfirmation.vue | 82 -- .../components/Account/SendPasswordReset.vue | 92 -- js/src/components/Account/Validate.vue | 60 -- js/src/components/Category/Create.vue | 93 -- js/src/components/Category/List.vue | 70 -- js/src/components/Event/Create.vue | 193 ---- js/src/components/Event/Edit.vue | 125 --- js/src/components/Event/Event.vue | 245 ----- js/src/components/Event/EventCard.vue | 44 + js/src/components/Event/EventList.vue | 150 --- js/src/components/Group/Create.vue | 136 --- js/src/components/Group/Group.vue | 241 ----- js/src/components/Group/GroupCard.vue | 30 + js/src/components/Group/GroupList.vue | 98 -- js/src/components/Home.vue | 178 ---- js/src/components/Location.vue | 51 - js/src/components/NavBar.vue | 192 ++-- js/src/components/PageNotFound.vue | 10 - js/src/graphql/actor.ts | 41 +- js/src/graphql/event.ts | 52 +- js/src/i18n/locale/en_US/LC_MESSAGES/app.po | 172 +++- js/src/i18n/locale/en_US/LC_MESSAGES/app.po~ | 30 + js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po | 172 +++- js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po~ | 2 +- js/src/main.ts | 9 +- js/src/router/index.ts | 46 +- js/src/types/actor.model.ts | 29 + js/src/types/event.model.ts | 46 + js/src/views/Account/Identities.vue | 92 ++ js/src/views/Account/Profile.vue | 111 +++ js/src/views/Account/Register.vue | 182 ++++ js/src/views/Category/Create.vue | 75 ++ js/src/views/Category/List.vue | 55 + js/src/views/Event/Create.vue | 165 +++ js/src/views/Event/Event.vue | 196 ++++ js/src/views/Event/EventList.vue | 111 +++ js/src/views/Group/Create.vue | 98 ++ js/src/views/Group/Group.vue | 112 +++ js/src/views/Group/GroupList.vue | 75 ++ js/src/views/Home.vue | 150 +++ js/src/views/Location.vue | 30 + js/src/views/PageNotFound.vue | 8 + js/src/views/User/Login.vue | 137 +++ js/src/views/User/PasswordReset.vue | 91 ++ js/src/views/User/ResendConfirmation.vue | 77 ++ js/src/views/User/SendPasswordReset.vue | 89 ++ js/src/views/User/Validate.vue | 59 ++ js/tsconfig.json | 2 +- lib/mobilizon/actors/actor.ex | 2 +- lib/mobilizon/actors/actors.ex | 40 +- .../actors/service/reset_password.ex | 6 +- lib/mobilizon/events/event.ex | 31 +- lib/mobilizon/events/events.ex | 2 +- lib/mobilizon_web/api/events.ex | 4 +- lib/mobilizon_web/resolvers/event.ex | 13 +- lib/mobilizon_web/resolvers/person.ex | 25 + lib/mobilizon_web/resolvers/user.ex | 2 +- lib/mobilizon_web/schema.ex | 19 +- lib/mobilizon_web/schema/actor.ex | 5 + lib/mobilizon_web/schema/actors/group.ex | 1 + lib/mobilizon_web/schema/actors/person.ex | 2 + lib/mobilizon_web/schema/comment.ex | 1 + lib/mobilizon_web/schema/event.ex | 4 +- lib/service/activity_pub/activity_pub.ex | 3 +- lib/service/activity_pub/utils.ex | 3 +- priv/repo/seeds.exs | 11 +- test/support/factory.ex | 12 +- 79 files changed, 3482 insertions(+), 3369 deletions(-) create mode 100644 js/patches/easygettext+2.7.0.patch delete mode 100644 js/src/components/Account/Account.vue delete mode 100644 js/src/components/Account/Identities.vue delete mode 100644 js/src/components/Account/Login.vue delete mode 100644 js/src/components/Account/PasswordReset.vue delete mode 100644 js/src/components/Account/Register.vue delete mode 100644 js/src/components/Account/RegisterAvatar.vue delete mode 100644 js/src/components/Account/ResendConfirmation.vue delete mode 100644 js/src/components/Account/SendPasswordReset.vue delete mode 100644 js/src/components/Account/Validate.vue delete mode 100644 js/src/components/Category/Create.vue delete mode 100644 js/src/components/Category/List.vue delete mode 100644 js/src/components/Event/Create.vue delete mode 100644 js/src/components/Event/Edit.vue delete mode 100644 js/src/components/Event/Event.vue create mode 100644 js/src/components/Event/EventCard.vue delete mode 100644 js/src/components/Event/EventList.vue delete mode 100644 js/src/components/Group/Create.vue delete mode 100644 js/src/components/Group/Group.vue create mode 100644 js/src/components/Group/GroupCard.vue delete mode 100644 js/src/components/Group/GroupList.vue delete mode 100644 js/src/components/Home.vue delete mode 100644 js/src/components/Location.vue delete mode 100644 js/src/components/PageNotFound.vue create mode 100644 js/src/i18n/locale/en_US/LC_MESSAGES/app.po~ create mode 100644 js/src/types/actor.model.ts create mode 100644 js/src/types/event.model.ts create mode 100644 js/src/views/Account/Identities.vue create mode 100644 js/src/views/Account/Profile.vue create mode 100644 js/src/views/Account/Register.vue create mode 100644 js/src/views/Category/Create.vue create mode 100644 js/src/views/Category/List.vue create mode 100644 js/src/views/Event/Create.vue create mode 100644 js/src/views/Event/Event.vue create mode 100644 js/src/views/Event/EventList.vue create mode 100644 js/src/views/Group/Create.vue create mode 100644 js/src/views/Group/Group.vue create mode 100644 js/src/views/Group/GroupList.vue create mode 100644 js/src/views/Home.vue create mode 100644 js/src/views/Location.vue create mode 100644 js/src/views/PageNotFound.vue create mode 100644 js/src/views/User/Login.vue create mode 100644 js/src/views/User/PasswordReset.vue create mode 100644 js/src/views/User/ResendConfirmation.vue create mode 100644 js/src/views/User/SendPasswordReset.vue create mode 100644 js/src/views/User/Validate.vue diff --git a/js/Makefile b/js/Makefile index 315d4ce25..c55170452 100644 --- a/js/Makefile +++ b/js/Makefile @@ -37,7 +37,7 @@ translations: ./$(OUTPUT_DIR)/translations.json mkdir -p $(dir $@) which gettext-extract # Extract gettext strings from templates files and create a POT dictionary template. - gettext-extract --attribute v-translate --quiet --output $@ $(GETTEXT_HTML_SOURCES) + gettext-extract --attribute v-translate --quiet --parseScript false --output $@ $(GETTEXT_HTML_SOURCES) # Extract gettext strings from JavaScript files. xgettext --language=JavaScript --keyword=npgettext:1c,2,3 \ --from-code=utf-8 --join-existing --no-wrap \ diff --git a/js/package-lock.json b/js/package-lock.json index 1e05c10c6..0a5d103d1 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -890,12 +890,6 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, - "@types/async": { - "version": "2.0.50", - "resolved": "https://registry.npmjs.org/@types/async/-/async-2.0.50.tgz", - "integrity": "sha512-VMhZMMQgV1zsR+lX/0IBfAk+8Eb7dPVMWiQGFAt3qjo5x7Ml6b77jUo0e1C3ToD+XRDXqtrfw+6AB0uUsPEr3Q==", - "optional": true - }, "@types/babel-types": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.4.tgz", @@ -1144,7 +1138,7 @@ }, "globby": { "version": "8.0.1", - "resolved": "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", "dev": true, "requires": { @@ -1657,6 +1651,12 @@ "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", "dev": true }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", @@ -1679,10 +1679,19 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" + } + }, "ansi-colors": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz", - "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-html": { @@ -1739,72 +1748,69 @@ } }, "apollo-cache": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.23.tgz", - "integrity": "sha512-9FcavymJQdjaYX6of1xgjFmWp8UUCtlW/S9k5bfMMnMNAAQMDnuOFVEklawdSbyAhM4hh1kSymyt/r23K1tVSA==", + "version": "1.1.25", + "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.25.tgz", + "integrity": "sha512-9HhI/tVEHAeGaJJvi1Vpf6PzXUCA0PqNbigi2G3uOc180JjxbcaBvEbKXMEDb/UyTXkFWzI4PiPDuDQFqmIMSA==", "requires": { - "apollo-utilities": "^1.1.0" + "apollo-utilities": "^1.1.2", + "tslib": "^1.9.3" }, "dependencies": { "apollo-utilities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.0.tgz", - "integrity": "sha512-D3scmF6vJkCBECMasMEc0J9dNNHVULl6h2d7/oGJxWid1fgcAPHZJN5XLCZisuOfn0Dvvu3Unf/zK00Z3e49Qg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.2.tgz", + "integrity": "sha512-EjDx8vToK+zkWIxc76ZQY/irRX52puNg04xf/w8R0kVTDAgHuVfnFVC01O5vE25kFnIaa5em0pFI0p9b6YMkhQ==", "requires": { - "fast-json-stable-stringify": "^2.0.0" + "fast-json-stable-stringify": "^2.0.0", + "tslib": "^1.9.3" } } } }, "apollo-cache-inmemory": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.4.0.tgz", - "integrity": "sha512-gqwiZCApG+hRXEbtDrNIUtNcKKeO3RTih4mydJZRJpFp+PgBf8AZ2z4/uTJFFijmR9krmUWdCRfW1Aesb5+Ktg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.4.2.tgz", + "integrity": "sha512-fDVmj5j1e3W+inyuSwjIcMgbQ4edcFgmiKTBMFAEKAq0jg33X7FrbDX8JT2t5Vuf75Mva50JDlt5wXdu7C6WuA==", "requires": { - "apollo-cache": "^1.1.23", - "apollo-utilities": "^1.1.0", - "optimism": "^0.6.8" + "apollo-cache": "^1.1.25", + "apollo-utilities": "^1.1.2", + "optimism": "^0.6.9", + "tslib": "^1.9.3" }, "dependencies": { "apollo-utilities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.0.tgz", - "integrity": "sha512-D3scmF6vJkCBECMasMEc0J9dNNHVULl6h2d7/oGJxWid1fgcAPHZJN5XLCZisuOfn0Dvvu3Unf/zK00Z3e49Qg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.2.tgz", + "integrity": "sha512-EjDx8vToK+zkWIxc76ZQY/irRX52puNg04xf/w8R0kVTDAgHuVfnFVC01O5vE25kFnIaa5em0pFI0p9b6YMkhQ==", "requires": { - "fast-json-stable-stringify": "^2.0.0" + "fast-json-stable-stringify": "^2.0.0", + "tslib": "^1.9.3" } } } }, "apollo-client": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.4.9.tgz", - "integrity": "sha512-7IoIz+3hAk3166663ioyrsPdlTSAQa24HsJPVWw2QM/UE1wZTommu+uhwj9KugL6vpE/wyhyYgEs/9R7PlCsQA==", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.4.12.tgz", + "integrity": "sha512-E5ClFSB9btJLYibLKwLDSCg+w9tI+25eZgXOM+DClawu7of4d/xhuV/xvpuZpsMP3qwrp0QPacBnfG4tUJs3/w==", "requires": { - "@types/async": "2.0.50", "@types/zen-observable": "^0.8.0", - "apollo-cache": "1.1.23", + "apollo-cache": "1.1.25", "apollo-link": "^1.0.0", "apollo-link-dedup": "^1.0.0", - "apollo-utilities": "1.1.0", + "apollo-utilities": "1.1.2", "symbol-observable": "^1.0.2", + "tslib": "^1.9.3", "zen-observable": "^0.8.0" }, "dependencies": { - "apollo-cache": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.23.tgz", - "integrity": "sha512-9FcavymJQdjaYX6of1xgjFmWp8UUCtlW/S9k5bfMMnMNAAQMDnuOFVEklawdSbyAhM4hh1kSymyt/r23K1tVSA==", - "requires": { - "apollo-utilities": "^1.1.0" - } - }, "apollo-utilities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.0.tgz", - "integrity": "sha512-D3scmF6vJkCBECMasMEc0J9dNNHVULl6h2d7/oGJxWid1fgcAPHZJN5XLCZisuOfn0Dvvu3Unf/zK00Z3e49Qg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.2.tgz", + "integrity": "sha512-EjDx8vToK+zkWIxc76ZQY/irRX52puNg04xf/w8R0kVTDAgHuVfnFVC01O5vE25kFnIaa5em0pFI0p9b6YMkhQ==", "requires": { - "fast-json-stable-stringify": "^2.0.0" + "fast-json-stable-stringify": "^2.0.0", + "tslib": "^1.9.3" } } } @@ -1824,25 +1830,6 @@ "integrity": "sha512-i4NuqT3DSFczFcC7NMUzmnYjKX7NggLY+rqYVf+kE9JjqKOQhT6wqhaWsVIABfIUGE/N0DTgYJBCMu/18aXmYA==", "requires": { "apollo-link": "^1.2.6" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.6.tgz", - "integrity": "sha512-sUNlA20nqIF3gG3F8eyMD+mO80fmf3dPZX+GUOs3MI9oZR8ug09H3F0UsWJMcpEg6h55Yy5wZ+BMmAjrbenF/Q==", - "requires": { - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.13" - } - }, - "zen-observable-ts": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.13.tgz", - "integrity": "sha512-WDb8SM0tHCb6c0l1k60qXWlm1ok3zN9U4VkLdnBKQwIYwUoB9psH7LIFgR+JVCCMmBxUgOjskIid8/N02k/2Bg==", - "requires": { - "zen-observable": "^0.8.0" - } - } } }, "apollo-link-http": { @@ -1939,7 +1926,7 @@ }, "array-equal": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, @@ -2077,7 +2064,7 @@ }, "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -2191,7 +2178,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -2210,7 +2197,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -2501,9 +2488,9 @@ }, "dependencies": { "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true } } @@ -2513,6 +2500,21 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2652,6 +2654,14 @@ "node-releases": "^1.0.1" } }, + "buefy": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/buefy/-/buefy-0.7.1.tgz", + "integrity": "sha512-Pq7T5ASuSjpBMFPQfnkDLCKtQxz8ciftTwYkzix7DMWvZHjtcZh1dF34ve8StjXqknEKYxFruCyioE3LdPmqqQ==", + "requires": { + "bulma": "0.7.2" + } + }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -2693,6 +2703,11 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "bulma": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.7.2.tgz", + "integrity": "sha512-6JHEu8U/1xsyOst/El5ImLcZIiE2JFXgvrz8GGWbnDLwTNRPJzdAM0aoUM1Ns0avALcVb6KZz9NhzmU53dGDcQ==" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -2701,7 +2716,7 @@ }, "cacache": { "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { @@ -2807,7 +2822,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -2841,6 +2856,12 @@ "integrity": "sha512-x/E/SNwD80I0bT+fF9Y3Kbwo7Xd1xSafCAmFlpJmaVg3SQoJJOH4Ivb9fi9S0WjfqewQ6Ydt1zEVZpmMVYNeDA==", "dev": true }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, "case-sensitive-paths-webpack-plugin": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", @@ -3121,6 +3142,12 @@ } } }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -3292,7 +3319,7 @@ }, "colors": { "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, @@ -3391,10 +3418,24 @@ "typedarray": "^0.0.6" } }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, "console-browserify": { @@ -3574,6 +3615,15 @@ "elliptic": "^6.0.0" } }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, "create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -3638,9 +3688,15 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, "css-color-names": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, @@ -3753,7 +3809,7 @@ }, "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, @@ -3770,13 +3826,13 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { @@ -4005,7 +4061,7 @@ }, "deep-eql": { "version": "0.1.3", - "resolved": "http://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", "dev": true, "requires": { @@ -4018,6 +4074,12 @@ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -4353,10 +4415,16 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "duplexify": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", @@ -5074,7 +5142,7 @@ }, "finalhandler": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dev": true, "requires": { @@ -5141,9 +5209,9 @@ } }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", + "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", "dev": true, "requires": { "debug": "=3.1.0" @@ -5249,7 +5317,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -5262,7 +5330,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -5317,9 +5385,9 @@ "dev": true }, "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", "dev": true, "optional": true, "requires": { @@ -5345,7 +5413,7 @@ "optional": true }, "are-we-there-yet": { - "version": "1.1.4", + "version": "1.1.5", "bundled": true, "dev": true, "optional": true, @@ -5369,7 +5437,7 @@ } }, "chownr": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true @@ -5405,7 +5473,7 @@ } }, "deep-extend": { - "version": "0.5.1", + "version": "0.6.0", "bundled": true, "dev": true, "optional": true @@ -5454,7 +5522,7 @@ } }, "glob": { - "version": "7.1.2", + "version": "7.1.3", "bundled": true, "dev": true, "optional": true, @@ -5474,12 +5542,12 @@ "optional": true }, "iconv-lite": { - "version": "0.4.21", + "version": "0.4.24", "bundled": true, "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -5540,16 +5608,16 @@ "dev": true }, "minipass": { - "version": "2.2.4", + "version": "2.3.5", "bundled": true, "dev": true, "requires": { - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "dev": true, "optional": true, @@ -5572,7 +5640,7 @@ "optional": true }, "needle": { - "version": "2.2.0", + "version": "2.2.4", "bundled": true, "dev": true, "optional": true, @@ -5583,18 +5651,18 @@ } }, "node-pre-gyp": { - "version": "0.10.0", + "version": "0.10.3", "bundled": true, "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", - "needle": "^2.2.0", + "needle": "^2.2.1", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", - "rc": "^1.1.7", + "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", "tar": "^4" @@ -5611,13 +5679,13 @@ } }, "npm-bundled": { - "version": "1.0.3", + "version": "1.0.5", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.1.10", + "version": "1.2.0", "bundled": true, "dev": true, "optional": true, @@ -5692,12 +5760,12 @@ "optional": true }, "rc": { - "version": "1.2.7", + "version": "1.2.8", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" @@ -5727,16 +5795,16 @@ } }, "rimraf": { - "version": "2.6.2", + "version": "2.6.3", "bundled": true, "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.1", + "version": "5.1.2", "bundled": true, "dev": true }, @@ -5753,7 +5821,7 @@ "optional": true }, "semver": { - "version": "5.5.0", + "version": "5.6.0", "bundled": true, "dev": true, "optional": true @@ -5804,17 +5872,17 @@ "optional": true }, "tar": { - "version": "4.4.1", + "version": "4.4.8", "bundled": true, "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", + "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.2" } }, @@ -5825,12 +5893,12 @@ "optional": true }, "wide-align": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -5839,7 +5907,7 @@ "dev": true }, "yallist": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true } @@ -5875,7 +5943,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -5942,7 +6010,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -6080,6 +6148,15 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, "globals": { "version": "11.9.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", @@ -6088,7 +6165,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -6101,7 +6178,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -6118,6 +6195,33 @@ "minimatch": "~3.0.2" } }, + "got": { + "version": "6.7.1", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", @@ -6139,21 +6243,11 @@ } }, "graphql-anywhere": { - "version": "4.1.25", - "resolved": "https://registry.npmjs.org/graphql-anywhere/-/graphql-anywhere-4.1.25.tgz", - "integrity": "sha512-6XgTH+3n2R+xhmfFMM37tIUyZPy7Q7/TA4H37m0x6dN/UtsDiGs4jfH1upCIiHc8eKtJ0leyadhFIiXqNB4KzA==", + "version": "4.1.23", + "resolved": "https://registry.npmjs.org/graphql-anywhere/-/graphql-anywhere-4.1.23.tgz", + "integrity": "sha512-8wtmwxWmLzAy52Z4WAw9UiYZ4ViiNXM+2DMOSlg2F7WsVstD0v75uOjCLJQUvbld5kHrgzTxter/THFVkGL+Yw==", "requires": { - "apollo-utilities": "^1.1.0" - }, - "dependencies": { - "apollo-utilities": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.1.0.tgz", - "integrity": "sha512-D3scmF6vJkCBECMasMEc0J9dNNHVULl6h2d7/oGJxWid1fgcAPHZJN5XLCZisuOfn0Dvvu3Unf/zK00Z3e49Qg==", - "requires": { - "fast-json-stable-stringify": "^2.0.0" - } - } + "apollo-utilities": "^1.0.26" } }, "graphql-tag": { @@ -6178,9 +6272,9 @@ } }, "handle-thing": { - "version": "1.2.5", - "resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, "har-schema": { @@ -6419,7 +6513,7 @@ }, "html-webpack-plugin": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { @@ -6448,7 +6542,7 @@ }, "htmlparser2": { "version": "3.3.0", - "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { @@ -6475,7 +6569,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -6501,7 +6595,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -6558,7 +6652,7 @@ }, "http-proxy-middleware": { "version": "0.18.0", - "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { @@ -6675,9 +6769,9 @@ "dev": true }, "immutable-tuple": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/immutable-tuple/-/immutable-tuple-0.4.9.tgz", - "integrity": "sha512-LWbJPZnidF8eczu7XmcnLBsumuyRBkpwIRPCZxlojouhBo5jEBO4toj6n7hMy6IxHU/c+MqDSWkvaTpPlMQcyA==" + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/immutable-tuple/-/immutable-tuple-0.4.10.tgz", + "integrity": "sha512-45jheDbc3Kr5Cw8EtDD+4woGRUV0utIrJBZT8XH0TPZRfm8tzT0/sLGGzyyCCFqFMG5Pv5Igf3WY/arn6+8V9Q==" }, "import-cwd": { "version": "2.1.0", @@ -6732,6 +6826,12 @@ } } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -6762,9 +6862,9 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -6843,6 +6943,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "internal-ip": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", @@ -7063,6 +7169,22 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7123,6 +7245,12 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -7143,6 +7271,12 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -7490,6 +7624,15 @@ "is-buffer": "^1.1.5" } }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + } + }, "launch-editor": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", @@ -7872,6 +8015,12 @@ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", "dev": true }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "lru-cache": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", @@ -7986,9 +8135,9 @@ "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==" }, "markdown-it-toc-and-anchor": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/markdown-it-toc-and-anchor/-/markdown-it-toc-and-anchor-4.1.2.tgz", - "integrity": "sha1-snH2lKcL9xnmtygFbXvZMdNkIU0=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/markdown-it-toc-and-anchor/-/markdown-it-toc-and-anchor-4.2.0.tgz", + "integrity": "sha512-DusSbKtg8CwZ92ztN7bOojDpP4h0+w7BVOPuA3PHDIaabMsERYpwsazLYSP/UlKedoQjOz21mwlai36TQ04EpA==", "requires": { "clone": "^2.1.0", "uslug": "^1.0.4" @@ -8045,7 +8194,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -8070,7 +8219,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -8313,7 +8462,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -8361,7 +8510,7 @@ }, "commander": { "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, @@ -8687,7 +8836,7 @@ "dependencies": { "semver": { "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true } @@ -8785,7 +8934,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -8808,7 +8957,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -9064,9 +9213,9 @@ } }, "optimism": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.6.8.tgz", - "integrity": "sha512-bN5n1KCxSqwBDnmgDnzMtQTHdL+uea2HYFx1smvtE+w2AMl0Uy31g0aXnP/Nt85OINnMJPRpJyfRQLTCqn5Weg==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.6.9.tgz", + "integrity": "sha512-xoQm2lvXbCA9Kd7SCx6y713Y7sZ6fUc5R6VYpoL5M6svKJbTuvtNopexK8sO8K4s0EOUYHuPN2+yAEsNyRggkQ==", "requires": { "immutable-tuple": "^0.4.9" } @@ -9142,7 +9291,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -9193,7 +9342,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -9302,6 +9451,18 @@ "thunkify": "~2.1.1" } }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", @@ -9368,6 +9529,75 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "patch-package": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-5.1.1.tgz", + "integrity": "sha512-bO+vfFGgTVTtv89kXWGEMIPnrYhhhMtbOnJKStfIhNWUxperVjlI++1ixksi0YPCMPGuFy9W3zsKHxIITV2r2A==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cross-spawn": "^5.1.0", + "fs-extra": "^4.0.1", + "minimist": "^1.2.0", + "rimraf": "^2.6.1", + "slash": "^1.0.0", + "tmp": "^0.0.31", + "update-notifier": "^2.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "path-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", @@ -9388,7 +9618,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -10080,6 +10310,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, "prettier": { "version": "1.13.7", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", @@ -10087,7 +10323,7 @@ }, "pretty-bytes": { "version": "4.0.2", - "resolved": "http://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", "dev": true }, @@ -10482,6 +10718,18 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "read-pkg": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", @@ -10527,7 +10775,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -10560,7 +10808,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -10697,6 +10945,25 @@ "resolved": "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.5.2.tgz", "integrity": "sha512-XNqSZHJsFGnvEGkg/2IrCp6G8Ya3qLj4mq0bSHil/dfdO82LOxGnMnJjAD9MYCvf/8cDCO8pL+1i65yzmP7rPQ==" }, + "registry-auth-token": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.4.0.tgz", @@ -10714,7 +10981,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -10753,7 +11020,7 @@ }, "css-select": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { @@ -10775,7 +11042,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -10897,16 +11164,14 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } } }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -10992,7 +11257,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -11051,7 +11316,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -11071,7 +11336,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -11175,7 +11440,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -11211,6 +11476,15 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + } + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -11714,65 +11988,42 @@ "dev": true }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", + "debug": "^4.1.0", + "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "spdy-transport": "^3.0.0" } }, "spdy-transport": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", - "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", + "debug": "^4.1.0", + "detect-node": "^2.0.4", "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", "dev": true, "requires": { - "ms": "2.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -11981,7 +12232,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -11991,6 +12242,12 @@ "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", "dev": true }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "stylehacks": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz", @@ -12064,7 +12321,7 @@ }, "tar": { "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { @@ -12083,6 +12340,49 @@ "is2": "2.0.1" } }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + } + } + }, "terser": { "version": "3.10.12", "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.12.tgz", @@ -12307,6 +12607,12 @@ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -12322,6 +12628,15 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -12818,6 +13133,15 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -12881,12 +13205,36 @@ } } }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", "dev": true }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -12974,6 +13322,15 @@ "requires-port": "^1.0.0" } }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -13185,16 +13542,6 @@ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==" }, - "vuetify": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-1.3.9.tgz", - "integrity": "sha512-6cgWRVEBkuUowrfAR9i4lVcTQtwpz9WLM5IcmsMmsmto2GLgf+bi3EfbVFi5xBF3UaV+TC1oHkZq+H/bqgyfhw==" - }, - "vuetify-google-autocomplete": { - "version": "2.0.0-beta.5", - "resolved": "https://registry.npmjs.org/vuetify-google-autocomplete/-/vuetify-google-autocomplete-2.0.0-beta.5.tgz", - "integrity": "sha512-+6Tf97clc1ypVEA+A7XCTonYruxD3N28i2zidp30ex6U3Y1yVB7/km4sN2MxT1gWWVLlZusg8MvF48E6LSP31g==" - }, "vuex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", @@ -13370,9 +13717,9 @@ } }, "webpack-dev-server": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz", - "integrity": "sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww==", + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -13394,23 +13741,19 @@ "portfinder": "^1.0.9", "schema-utils": "^1.0.0", "selfsigned": "^1.9.1", + "semver": "^5.6.0", "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^3.4.1", + "spdy": "^4.0.0", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", + "url": "^0.11.0", "webpack-dev-middleware": "3.4.0", "webpack-log": "^2.0.0", "yargs": "12.0.2" }, "dependencies": { - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -13435,21 +13778,6 @@ "xregexp": "4.0.0" } }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -13459,12 +13787,6 @@ "locate-path": "^3.0.0" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, "invert-kv": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", @@ -13508,20 +13830,20 @@ } }, "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", + "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -13553,9 +13875,15 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -13713,6 +14041,15 @@ "string-width": "^1.0.2 || 2" } }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -13805,7 +14142,7 @@ "dependencies": { "hoek": { "version": "4.2.1", - "resolved": "http://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", "dev": true }, @@ -13822,7 +14159,7 @@ }, "topo": { "version": "2.0.2", - "resolved": "http://registry.npmjs.org/topo/-/topo-2.0.2.tgz", + "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", "dev": true, "requires": { @@ -13949,7 +14286,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -13985,7 +14322,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -14000,6 +14337,17 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", + "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, "ws": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", @@ -14009,6 +14357,12 @@ "async-limiter": "~1.0.0" } }, + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -14046,7 +14400,7 @@ }, "yargs": { "version": "11.1.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { @@ -14135,9 +14489,9 @@ } }, "zen-observable": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.9.tgz", - "integrity": "sha512-Y9kPzjGvIZ5jchSlqlCpBW3I82zBBL4z+ulXDRVA1NwsKzjt5kwAi+gOYIy0htNkfuehGZZtP5mRXHRV6TjDWw==" + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.11.tgz", + "integrity": "sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ==" }, "zen-observable-ts": { "version": "0.8.13", diff --git a/js/package.json b/js/package.json index eeec4ed92..1a7b32335 100644 --- a/js/package.json +++ b/js/package.json @@ -8,7 +8,8 @@ "analyze-bundle": "npm run build -- --report-json && webpack-bundle-analyzer ../priv/static/report.json", "dev": "vue-cli-service serve", "test:e2e": "vue-cli-service test:e2e", - "test:unit": "vue-cli-service test:unit" + "test:unit": "vue-cli-service test:unit", + "prepare": "patch-package" }, "dependencies": { "apollo-absinthe-upload-link": "^1.4.0", @@ -17,6 +18,7 @@ "apollo-link": "^1.2.6", "apollo-link-http": "^1.5.9", "apollo-link-state": "^0.4.2", + "buefy": "^0.7.1", "easygettext": "^2.7.0", "graphql": "^14.1.1", "graphql-tag": "^2.10.1", @@ -32,8 +34,6 @@ "vue-markdown": "^2.2.4", "vue-property-decorator": "^7.2.0", "vue-router": "^3.0.2", - "vuetify": "^1.3.9", - "vuetify-google-autocomplete": "^2.0.0-beta.5", "vuex": "^3.0.1" }, "devDependencies": { @@ -51,6 +51,7 @@ "chai": "^4.2.0", "dotenv-webpack": "^1.5.7", "node-sass": "^4.10.0", + "patch-package": "^5.1.1", "sass-loader": "^7.1.0", "tslint-config-airbnb": "^5.11.1", "typescript": "^3.0.0", diff --git a/js/patches/easygettext+2.7.0.patch b/js/patches/easygettext+2.7.0.patch new file mode 100644 index 000000000..bdb2ce213 --- /dev/null +++ b/js/patches/easygettext+2.7.0.patch @@ -0,0 +1,41 @@ +patch-package +--- a/node_modules/easygettext/src/extract-cli.js ++++ b/node_modules/easygettext/src/extract-cli.js +@@ -22,9 +22,12 @@ const endDelimiter = argv.endDelimiter === undefined ? constants.DEFAULT_DELIMIT + const extraAttribute = argv.attribute || false; + const extraFilter = argv.filter || false; + const filterPrefix = argv.filterPrefix || constants.DEFAULT_FILTER_PREFIX; ++const parseScript = argv.parseScript === undefined ? true : argv.parseScript === 'true'; + + if (!quietMode && (!files || files.length === 0)) { +- console.log('Usage:\n\tgettext-extract [--attribute EXTRA-ATTRIBUTE] [--filterPrefix FILTER-PREFIX] [--output OUTFILE] '); ++ console.log( ++ 'Usage:\n\tgettext-extract [--attribute EXTRA-ATTRIBUTE] [--filterPrefix FILTER-PREFIX] [--parseScript BOOLEAN] [--output OUTFILE] ', ++ ); + process.exit(1); + } + +@@ -54,7 +57,7 @@ const extractor = new extract.Extractor({ + }); + + +-files.forEach(function(filename) { ++files.forEach(function (filename) { + let file = filename; + const ext = file.split('.').pop(); + if (ALLOWED_EXTENSIONS.indexOf(ext) === -1) { +@@ -63,9 +66,13 @@ files.forEach(function(filename) { + } + console.log(`[${PROGRAM_NAME}] extracting: '${filename}`); + try { +- let data = fs.readFileSync(file, {encoding: 'utf-8'}).toString(); ++ let data = fs.readFileSync(file, { encoding: 'utf-8' }).toString(); + extractor.parse(file, extract.preprocessTemplate(data, ext)); + ++ if (!parseScript) { ++ return; ++ } ++ + if (ext !== 'js') { + data = extract.preprocessScriptTags(data, ext); + } diff --git a/js/public/index.html b/js/public/index.html index 27e6f83c0..86e3871f2 100644 --- a/js/public/index.html +++ b/js/public/index.html @@ -1,17 +1,21 @@ - - - - - - - mobilizon - - - -
- - - + + + + + + + + + mobilizon + + + + +
+ + + + \ No newline at end of file diff --git a/js/src/App.vue b/js/src/App.vue index bd3b4b169..ac3070a21 100644 --- a/js/src/App.vue +++ b/js/src/App.vue @@ -1,152 +1,19 @@ diff --git a/js/src/components/Account/Account.vue b/js/src/components/Account/Account.vue deleted file mode 100644 index 0f9b06a11..000000000 --- a/js/src/components/Account/Account.vue +++ /dev/null @@ -1,213 +0,0 @@ - - - diff --git a/js/src/components/Account/Identities.vue b/js/src/components/Account/Identities.vue deleted file mode 100644 index 0c468c26a..000000000 --- a/js/src/components/Account/Identities.vue +++ /dev/null @@ -1,133 +0,0 @@ - - - diff --git a/js/src/components/Account/Login.vue b/js/src/components/Account/Login.vue deleted file mode 100644 index f6b2b294d..000000000 --- a/js/src/components/Account/Login.vue +++ /dev/null @@ -1,151 +0,0 @@ - - - diff --git a/js/src/components/Account/PasswordReset.vue b/js/src/components/Account/PasswordReset.vue deleted file mode 100644 index 47ce03c7f..000000000 --- a/js/src/components/Account/PasswordReset.vue +++ /dev/null @@ -1,123 +0,0 @@ - - - diff --git a/js/src/components/Account/Register.vue b/js/src/components/Account/Register.vue deleted file mode 100644 index 114521dc7..000000000 --- a/js/src/components/Account/Register.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - - - diff --git a/js/src/components/Account/RegisterAvatar.vue b/js/src/components/Account/RegisterAvatar.vue deleted file mode 100644 index db44bb544..000000000 --- a/js/src/components/Account/RegisterAvatar.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/js/src/components/Account/ResendConfirmation.vue b/js/src/components/Account/ResendConfirmation.vue deleted file mode 100644 index 886d28096..000000000 --- a/js/src/components/Account/ResendConfirmation.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/js/src/components/Account/SendPasswordReset.vue b/js/src/components/Account/SendPasswordReset.vue deleted file mode 100644 index b71fef5e4..000000000 --- a/js/src/components/Account/SendPasswordReset.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - diff --git a/js/src/components/Account/Validate.vue b/js/src/components/Account/Validate.vue deleted file mode 100644 index a9d2a1f72..000000000 --- a/js/src/components/Account/Validate.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/js/src/components/Category/Create.vue b/js/src/components/Category/Create.vue deleted file mode 100644 index c36ddec53..000000000 --- a/js/src/components/Category/Create.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - - diff --git a/js/src/components/Category/List.vue b/js/src/components/Category/List.vue deleted file mode 100644 index 072f48082..000000000 --- a/js/src/components/Category/List.vue +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - diff --git a/js/src/components/Event/Create.vue b/js/src/components/Event/Create.vue deleted file mode 100644 index f24f5b4de..000000000 --- a/js/src/components/Event/Create.vue +++ /dev/null @@ -1,193 +0,0 @@ - - - - - diff --git a/js/src/components/Event/Edit.vue b/js/src/components/Event/Edit.vue deleted file mode 100644 index cb23cc4ed..000000000 --- a/js/src/components/Event/Edit.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - diff --git a/js/src/components/Event/Event.vue b/js/src/components/Event/Event.vue deleted file mode 100644 index a7f443823..000000000 --- a/js/src/components/Event/Event.vue +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - diff --git a/js/src/components/Event/EventCard.vue b/js/src/components/Event/EventCard.vue new file mode 100644 index 000000000..04244a6f0 --- /dev/null +++ b/js/src/components/Event/EventCard.vue @@ -0,0 +1,44 @@ + + + diff --git a/js/src/components/Event/EventList.vue b/js/src/components/Event/EventList.vue deleted file mode 100644 index 8e3ba0408..000000000 --- a/js/src/components/Event/EventList.vue +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - diff --git a/js/src/components/Group/Create.vue b/js/src/components/Group/Create.vue deleted file mode 100644 index fb4dfa790..000000000 --- a/js/src/components/Group/Create.vue +++ /dev/null @@ -1,136 +0,0 @@ - - - - - diff --git a/js/src/components/Group/Group.vue b/js/src/components/Group/Group.vue deleted file mode 100644 index aec8085cb..000000000 --- a/js/src/components/Group/Group.vue +++ /dev/null @@ -1,241 +0,0 @@ - - - diff --git a/js/src/components/Group/GroupCard.vue b/js/src/components/Group/GroupCard.vue new file mode 100644 index 000000000..895aee0cd --- /dev/null +++ b/js/src/components/Group/GroupCard.vue @@ -0,0 +1,30 @@ + + + diff --git a/js/src/components/Group/GroupList.vue b/js/src/components/Group/GroupList.vue deleted file mode 100644 index c35a5b13a..000000000 --- a/js/src/components/Group/GroupList.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - diff --git a/js/src/components/Home.vue b/js/src/components/Home.vue deleted file mode 100644 index 0615fad08..000000000 --- a/js/src/components/Home.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - diff --git a/js/src/components/Location.vue b/js/src/components/Location.vue deleted file mode 100644 index 82a08fe5c..000000000 --- a/js/src/components/Location.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/js/src/components/NavBar.vue b/js/src/components/NavBar.vue index 42728fd70..b23ff9eb4 100644 --- a/js/src/components/NavBar.vue +++ b/js/src/components/NavBar.vue @@ -1,110 +1,56 @@ - - diff --git a/js/src/views/Account/Profile.vue b/js/src/views/Account/Profile.vue new file mode 100644 index 000000000..a06f9d716 --- /dev/null +++ b/js/src/views/Account/Profile.vue @@ -0,0 +1,111 @@ + + + diff --git a/js/src/views/Account/Register.vue b/js/src/views/Account/Register.vue new file mode 100644 index 000000000..543c23ff6 --- /dev/null +++ b/js/src/views/Account/Register.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/js/src/views/Category/Create.vue b/js/src/views/Category/Create.vue new file mode 100644 index 000000000..6617bb72d --- /dev/null +++ b/js/src/views/Category/Create.vue @@ -0,0 +1,75 @@ + + + diff --git a/js/src/views/Category/List.vue b/js/src/views/Category/List.vue new file mode 100644 index 000000000..0fb1a6e70 --- /dev/null +++ b/js/src/views/Category/List.vue @@ -0,0 +1,55 @@ + + + + + + diff --git a/js/src/views/Event/Create.vue b/js/src/views/Event/Create.vue new file mode 100644 index 000000000..b22b24a0b --- /dev/null +++ b/js/src/views/Event/Create.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/js/src/views/Event/Event.vue b/js/src/views/Event/Event.vue new file mode 100644 index 000000000..9863afee3 --- /dev/null +++ b/js/src/views/Event/Event.vue @@ -0,0 +1,196 @@ + + + + + + diff --git a/js/src/views/Event/EventList.vue b/js/src/views/Event/EventList.vue new file mode 100644 index 000000000..be25f0892 --- /dev/null +++ b/js/src/views/Event/EventList.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/js/src/views/Group/Create.vue b/js/src/views/Group/Create.vue new file mode 100644 index 000000000..fdf751e01 --- /dev/null +++ b/js/src/views/Group/Create.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/js/src/views/Group/Group.vue b/js/src/views/Group/Group.vue new file mode 100644 index 000000000..018468279 --- /dev/null +++ b/js/src/views/Group/Group.vue @@ -0,0 +1,112 @@ + + + diff --git a/js/src/views/Group/GroupList.vue b/js/src/views/Group/GroupList.vue new file mode 100644 index 000000000..e5f5872a6 --- /dev/null +++ b/js/src/views/Group/GroupList.vue @@ -0,0 +1,75 @@ + + + + + + diff --git a/js/src/views/Home.vue b/js/src/views/Home.vue new file mode 100644 index 000000000..04dca316e --- /dev/null +++ b/js/src/views/Home.vue @@ -0,0 +1,150 @@ + + + + + + diff --git a/js/src/views/Location.vue b/js/src/views/Location.vue new file mode 100644 index 000000000..0c0c7dd8d --- /dev/null +++ b/js/src/views/Location.vue @@ -0,0 +1,30 @@ + + + diff --git a/js/src/views/PageNotFound.vue b/js/src/views/PageNotFound.vue new file mode 100644 index 000000000..14530ae31 --- /dev/null +++ b/js/src/views/PageNotFound.vue @@ -0,0 +1,8 @@ + diff --git a/js/src/views/User/Login.vue b/js/src/views/User/Login.vue new file mode 100644 index 000000000..12c66129e --- /dev/null +++ b/js/src/views/User/Login.vue @@ -0,0 +1,137 @@ + + + diff --git a/js/src/views/User/PasswordReset.vue b/js/src/views/User/PasswordReset.vue new file mode 100644 index 000000000..1b0eae57b --- /dev/null +++ b/js/src/views/User/PasswordReset.vue @@ -0,0 +1,91 @@ + + + diff --git a/js/src/views/User/ResendConfirmation.vue b/js/src/views/User/ResendConfirmation.vue new file mode 100644 index 000000000..b0e566270 --- /dev/null +++ b/js/src/views/User/ResendConfirmation.vue @@ -0,0 +1,77 @@ + + + diff --git a/js/src/views/User/SendPasswordReset.vue b/js/src/views/User/SendPasswordReset.vue new file mode 100644 index 000000000..6b75c8b3d --- /dev/null +++ b/js/src/views/User/SendPasswordReset.vue @@ -0,0 +1,89 @@ + + + diff --git a/js/src/views/User/Validate.vue b/js/src/views/User/Validate.vue new file mode 100644 index 000000000..801a13a9a --- /dev/null +++ b/js/src/views/User/Validate.vue @@ -0,0 +1,59 @@ + + + diff --git a/js/tsconfig.json b/js/tsconfig.json index f28e98af7..38ee4457f 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -39,4 +39,4 @@ "exclude": [ "node_modules" ] -} +} \ No newline at end of file diff --git a/lib/mobilizon/actors/actor.ex b/lib/mobilizon/actors/actor.ex index 8972d000b..8dacdfa5c 100644 --- a/lib/mobilizon/actors/actor.ex +++ b/lib/mobilizon/actors/actor.ex @@ -42,7 +42,7 @@ defmodule Mobilizon.Actors.Actor do field(:shared_inbox_url, :string) field(:type, Mobilizon.Actors.ActorTypeEnum, default: :Person) field(:name, :string) - field(:domain, :string) + field(:domain, :string, default: nil) field(:summary, :string) field(:preferred_username, :string) field(:keys, :string) diff --git a/lib/mobilizon/actors/actors.ex b/lib/mobilizon/actors/actors.ex index dbc37865a..576d799ec 100644 --- a/lib/mobilizon/actors/actors.ex +++ b/lib/mobilizon/actors/actors.ex @@ -77,9 +77,30 @@ defmodule Mobilizon.Actors do Repo.all(from(a in Actor, where: a.user_id == ^user_id)) end - def get_actor_with_everything!(id) do - actor = Repo.get!(Actor, id) - Repo.preload(actor, [:organized_events, :followers, :followings]) + @spec get_actor_with_everything(integer()) :: Ecto.Query + defp do_get_actor_with_everything(id) do + from(a in Actor, where: a.id == ^id, preload: [:organized_events, :followers, :followings]) + end + + @doc """ + Returns an actor with every relation + """ + @spec get_actor_with_everything(integer()) :: Mobilizon.Actors.Actor.t() + def get_actor_with_everything(id) do + id + |> do_get_actor_with_everything + |> Repo.one() + end + + @doc """ + Returns an actor with every relation + """ + @spec get_local_actor_with_everything(integer()) :: Mobilizon.Actors.Actor.t() + def get_local_actor_with_everything(id) do + id + |> do_get_actor_with_everything + |> where([a], is_nil(a.domain)) + |> Repo.one() end @doc """ @@ -610,6 +631,19 @@ defmodule Mobilizon.Actors do {:error, hd(email_msg)} end + @doc """ + Create a new person actor + """ + def new_person(args) do + key = :public_key.generate_key({:rsa, 2048, 65_537}) + entry = :public_key.pem_entry_encode(:RSAPrivateKey, key) + pem = [entry] |> :public_key.pem_encode() |> String.trim_trailing() + args = Map.put(args, :keys, pem) + + actor = Mobilizon.Actors.Actor.registration_changeset(%Mobilizon.Actors.Actor{}, args) + Mobilizon.Repo.insert(actor) + end + def register_bot_account(%{name: name, summary: summary}) do key = :public_key.generate_key({:rsa, 2048, 65_537}) entry = :public_key.pem_entry_encode(:RSAPrivateKey, key) diff --git a/lib/mobilizon/actors/service/reset_password.ex b/lib/mobilizon/actors/service/reset_password.ex index 0b03c6cd9..cd5fe478a 100644 --- a/lib/mobilizon/actors/service/reset_password.ex +++ b/lib/mobilizon/actors/service/reset_password.ex @@ -24,10 +24,12 @@ defmodule Mobilizon.Actors.Service.ResetPassword do {:ok, user} else {:error, %Ecto.Changeset{errors: [password: {"registration.error.password_too_short", _}]}} -> - {:error, :password_too_short} + {:error, + "The password you have choosen is too short. Please make sure your password contains at least 6 charaters."} _err -> - {:error, :invalid_token} + {:error, + "The token you provided is invalid. Make sure that the URL is exactly the one provided inside the email you got."} end end diff --git a/lib/mobilizon/events/event.ex b/lib/mobilizon/events/event.ex index 6f36bcc45..58fa14ac9 100644 --- a/lib/mobilizon/events/event.ex +++ b/lib/mobilizon/events/event.ex @@ -68,11 +68,11 @@ defmodule Mobilizon.Events.Event do :large_image, :publish_at, :online_address, - :phone_address + :phone_address, + :uuid ]) |> cast_assoc(:tags) |> cast_assoc(:physical_address) - |> build_url() |> validate_required([ :title, :begins_on, @@ -82,31 +82,4 @@ defmodule Mobilizon.Events.Event do :uuid ]) end - - @spec build_url(Ecto.Changeset.t()) :: Ecto.Changeset.t() - defp build_url(%Ecto.Changeset{changes: %{url: _url}} = changeset), do: changeset - - defp build_url(%Ecto.Changeset{changes: %{organizer_actor: organizer_actor}} = changeset) do - organizer_actor - |> Actor.actor_acct_from_actor() - |> do_build_url(changeset) - end - - defp build_url(%Ecto.Changeset{changes: %{organizer_actor_id: organizer_actor_id}} = changeset) do - organizer_actor_id - |> Mobilizon.Actors.get_actor!() - |> Actor.actor_acct_from_actor() - |> do_build_url(changeset) - end - - defp build_url(%Ecto.Changeset{} = changeset), do: changeset - - @spec do_build_url(String.t(), Ecto.Changeset.t()) :: Ecto.Changeset.t() - defp do_build_url(actor_acct, changeset) do - uuid = Ecto.UUID.generate() - - changeset - |> put_change(:uuid, uuid) - |> put_change(:url, "#{MobilizonWeb.Endpoint.url()}/@#{actor_acct}/#{uuid}") - end end diff --git a/lib/mobilizon/events/events.ex b/lib/mobilizon/events/events.ex index 68c5f1464..a9b0b426d 100644 --- a/lib/mobilizon/events/events.ex +++ b/lib/mobilizon/events/events.ex @@ -220,7 +220,7 @@ defmodule Mobilizon.Events do from( e in Event, where: e.visibility == ^:public, - preload: [:organizer_actor] + preload: [:organizer_actor, :participants] ) |> paginate(page, limit) diff --git a/lib/mobilizon_web/api/events.ex b/lib/mobilizon_web/api/events.ex index a2587c088..09e79670a 100644 --- a/lib/mobilizon_web/api/events.ex +++ b/lib/mobilizon_web/api/events.ex @@ -14,12 +14,12 @@ defmodule MobilizonWeb.API.Events do %{ title: title, description: description, - organizer_actor_username: organizer_actor_username, + organizer_actor_id: organizer_actor_id, begins_on: begins_on, category: category } = args ) do - with %Actor{url: url} = actor <- Actors.get_local_actor_by_name(organizer_actor_username), + with %Actor{url: url} = actor <- Actors.get_local_actor_with_everything(organizer_actor_id), title <- String.trim(title), mentions <- Formatter.parse_mentions(description), visibility <- Map.get(args, :visibility, "public"), diff --git a/lib/mobilizon_web/resolvers/event.ex b/lib/mobilizon_web/resolvers/event.ex index f75ea6922..c3784a240 100644 --- a/lib/mobilizon_web/resolvers/event.ex +++ b/lib/mobilizon_web/resolvers/event.ex @@ -39,8 +39,8 @@ defmodule MobilizonWeb.Resolvers.Event do @doc """ List participants for event (through an event request) """ - def list_participants_for_event(%{uuid: uuid}, %{page: page, limit: limit}, _resolution) do - {:ok, Mobilizon.Events.list_participants_for_event(uuid, page, limit)} + def list_participants_for_event(%Event{uuid: uuid}, _args, _resolution) do + {:ok, Mobilizon.Events.list_participants_for_event(uuid, 1, 10)} end @doc """ @@ -81,14 +81,7 @@ defmodule MobilizonWeb.Resolvers.Event do """ def create_event(_parent, args, %{context: %{current_user: user}}) do with {:ok, %Activity{data: %{"object" => %{"type" => "Event"} = object}}} <- - args - # Set default organizer_actor_id if none set - |> Map.update( - :organizer_actor_username, - Actors.get_actor_for_user(user).preferred_username, - & &1 - ) - |> MobilizonWeb.API.Events.create_event() do + MobilizonWeb.API.Events.create_event(args) do {:ok, %Event{ title: object["name"], diff --git a/lib/mobilizon_web/resolvers/person.ex b/lib/mobilizon_web/resolvers/person.ex index 4163e2b8e..ba53eee2d 100644 --- a/lib/mobilizon_web/resolvers/person.ex +++ b/lib/mobilizon_web/resolvers/person.ex @@ -3,6 +3,7 @@ defmodule MobilizonWeb.Resolvers.Person do Handles the person-related GraphQL calls """ alias Mobilizon.Actors + alias Mobilizon.Actors.Actor alias Mobilizon.Service.ActivityPub @deprecated "Use find_person/3 or find_group/3 instead" @@ -39,4 +40,28 @@ defmodule MobilizonWeb.Resolvers.Person do def get_current_person(_parent, _args, _resolution) do {:error, "You need to be logged-in to view current person"} end + + @doc """ + Returns the list of identities for the logged-in user + """ + def identities(_parent, _args, %{context: %{current_user: user}}) do + {:ok, Actors.get_actors_for_user(user)} + end + + def identities(_parent, _args, _resolution) do + {:error, "You need to be logged-in to view your list of identities"} + end + + def create_person(_parent, %{preferred_username: preferred_username} = args, %{ + context: %{current_user: user} + }) do + args = Map.put(args, :user_id, user.id) + + with {:ok, %Actor{} = new_person} <- Actors.new_person(args) do + {:ok, new_person} + else + {:error, %Ecto.Changeset{} = e} -> + {:error, "Unable to create a profile with this username"} + end + end end diff --git a/lib/mobilizon_web/resolvers/user.ex b/lib/mobilizon_web/resolvers/user.ex index e37d4bccb..108059228 100644 --- a/lib/mobilizon_web/resolvers/user.ex +++ b/lib/mobilizon_web/resolvers/user.ex @@ -36,7 +36,7 @@ defmodule MobilizonWeb.Resolvers.User do {:error, "User with email not found"} {:error, :unauthorized} -> - {:error, "Impossible to authenticate"} + {:error, "Impossible to authenticate, either your email or password are invalid."} end end diff --git a/lib/mobilizon_web/schema.ex b/lib/mobilizon_web/schema.ex index afdac3809..654871355 100644 --- a/lib/mobilizon_web/schema.ex +++ b/lib/mobilizon_web/schema.ex @@ -104,7 +104,7 @@ defmodule MobilizonWeb.Schema do end def plugins do - [Absinthe.Middleware.Dataloader | Absinthe.Plugin.defaults()] + [Absinthe.Middleware.Dataloader] ++ Absinthe.Plugin.defaults() end @desc """ @@ -175,6 +175,11 @@ defmodule MobilizonWeb.Schema do resolve(&Resolvers.Person.find_person/3) end + @desc "Get the persons for an user" + field :identities, list_of(:person) do + resolve(&Resolvers.Person.identities/3) + end + @desc "Get the list of categories" field :categories, non_null(list_of(:category)) do arg(:page, :integer, default_value: 1) @@ -201,7 +206,7 @@ defmodule MobilizonWeb.Schema do arg(:publish_at, :datetime) arg(:online_address, :string) arg(:phone_address, :string) - arg(:organizer_actor_username, non_null(:string)) + arg(:organizer_actor_id, non_null(:id)) arg(:category, non_null(:string)) resolve(&Resolvers.Event.create_event/3) @@ -273,6 +278,16 @@ defmodule MobilizonWeb.Schema do resolve(&Resolvers.User.change_default_actor/3) end + @desc "Create a new person for user" + field :create_person, :person do + arg(:preferred_username, non_null(:string)) + arg(:name, :string, description: "The displayed name for the new profile") + + arg(:description, :string, description: "The summary for the new profile", default_value: "") + + resolve(&Resolvers.Person.create_person/3) + end + @desc "Create a group" field :create_group, :group do arg(:preferred_username, non_null(:string), description: "The name for the group") diff --git a/lib/mobilizon_web/schema/actor.ex b/lib/mobilizon_web/schema/actor.ex index c3a051094..757252042 100644 --- a/lib/mobilizon_web/schema/actor.ex +++ b/lib/mobilizon_web/schema/actor.ex @@ -5,12 +5,14 @@ defmodule MobilizonWeb.Schema.ActorInterface do use Absinthe.Schema.Notation import Absinthe.Resolution.Helpers, only: [dataloader: 1] alias Mobilizon.Actors.Actor + alias Mobilizon.Events import_types(MobilizonWeb.Schema.Actors.FollowerType) import_types(MobilizonWeb.Schema.EventType) @desc "An ActivityPub actor" interface :actor do + field(:id, :id, description: "Internal ID for this actor") field(:url, :string, description: "The ActivityPub actor's URL") field(:type, :actor_type, description: "The type of Actor (Person, Group,…)") field(:name, :string, description: "The actor's displayed name") @@ -51,6 +53,9 @@ defmodule MobilizonWeb.Schema.ActorInterface do %Actor{type: :Group}, _ -> :group + + _, _ -> + nil end) end diff --git a/lib/mobilizon_web/schema/actors/group.ex b/lib/mobilizon_web/schema/actors/group.ex index 1dab34591..cf8316236 100644 --- a/lib/mobilizon_web/schema/actors/group.ex +++ b/lib/mobilizon_web/schema/actors/group.ex @@ -12,6 +12,7 @@ defmodule MobilizonWeb.Schema.Actors.GroupType do object :group do interfaces([:actor]) + field(:id, :id, description: "Internal ID for this group") field(:url, :string, description: "The ActivityPub actor's URL") field(:type, :actor_type, description: "The type of Actor (Person, Group,…)") field(:name, :string, description: "The actor's displayed name") diff --git a/lib/mobilizon_web/schema/actors/person.ex b/lib/mobilizon_web/schema/actors/person.ex index 46b11dece..24acaba5e 100644 --- a/lib/mobilizon_web/schema/actors/person.ex +++ b/lib/mobilizon_web/schema/actors/person.ex @@ -5,12 +5,14 @@ defmodule MobilizonWeb.Schema.Actors.PersonType do use Absinthe.Schema.Notation import Absinthe.Resolution.Helpers, only: [dataloader: 1] import_types(MobilizonWeb.Schema.UserType) + alias Mobilizon.Events @desc """ Represents a person identity """ object :person do interfaces([:actor]) + field(:id, :id, description: "Internal ID for this person") field(:user, :user, description: "The user this actor is associated to") field(:member_of, list_of(:member), description: "The list of groups this person is member of") diff --git a/lib/mobilizon_web/schema/comment.ex b/lib/mobilizon_web/schema/comment.ex index 0768ad06e..61a4569fa 100644 --- a/lib/mobilizon_web/schema/comment.ex +++ b/lib/mobilizon_web/schema/comment.ex @@ -6,6 +6,7 @@ defmodule MobilizonWeb.Schema.CommentType do @desc "A comment" object :comment do + field(:id, :id, description: "Internal ID for this comment") field(:uuid, :uuid) field(:url, :string) field(:local, :boolean) diff --git a/lib/mobilizon_web/schema/event.ex b/lib/mobilizon_web/schema/event.ex index 2ff2192c3..a06409243 100644 --- a/lib/mobilizon_web/schema/event.ex +++ b/lib/mobilizon_web/schema/event.ex @@ -3,6 +3,7 @@ defmodule MobilizonWeb.Schema.EventType do Schema representation for Event """ use Absinthe.Schema.Notation + alias Mobilizon.Actors import Absinthe.Resolution.Helpers, only: [dataloader: 1] import_types(MobilizonWeb.Schema.AddressType) import_types(MobilizonWeb.Schema.Events.ParticipantType) @@ -10,6 +11,7 @@ defmodule MobilizonWeb.Schema.EventType do @desc "An event" object :event do + field(:id, :id, description: "Internal ID for this event") field(:uuid, :uuid, description: "The Event UUID") field(:url, :string, description: "The ActivityPub Event URL") field(:local, :boolean, description: "Whether the event is local or not") @@ -28,7 +30,7 @@ defmodule MobilizonWeb.Schema.EventType do field(:online_address, :online_address, description: "Online address of the event") field(:phone_address, :phone_address, description: "Phone address for the event") - field(:organizer_actor, :person, + field(:organizer_actor, :actor, resolve: dataloader(Actors), description: "The event's organizer (as a person)" ) diff --git a/lib/service/activity_pub/activity_pub.ex b/lib/service/activity_pub/activity_pub.ex index 13979a32f..662096ab6 100644 --- a/lib/service/activity_pub/activity_pub.ex +++ b/lib/service/activity_pub/activity_pub.ex @@ -535,7 +535,8 @@ defmodule Mobilizon.Service.ActivityPub do defp ical_event_to_activity(%ExIcal.Event{} = ical_event, %Actor{} = actor, _source) do # Logger.debug(inspect ical_event) - # TODO : refactor me ! + # TODO : Use MobilizonWeb.API instead + # TODO : refactor me and move me somewhere else! # TODO : also, there should be a form of cache that allows this to be more efficient category = if is_nil(ical_event.categories) do diff --git a/lib/service/activity_pub/utils.ex b/lib/service/activity_pub/utils.ex index 84e8ee569..a24ceff08 100644 --- a/lib/service/activity_pub/utils.ex +++ b/lib/service/activity_pub/utils.ex @@ -118,7 +118,8 @@ defmodule Mobilizon.Service.ActivityPub.Utils do "organizer_actor_id" => actor_id, "begins_on" => object["begins_on"], "category_id" => Events.get_category_by_title(object["category"]).id, - "url" => object["id"] + "url" => object["id"], + "uuid" => object["uuid"] } end diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index 16117576e..b1ccb7bb6 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -21,10 +21,17 @@ actor = insert(:actor, user: user) # Insert a second actor account for the same user actor2 = insert(:actor, user: user) -# Make actor organize an event +# Make actor organize a few events event = insert(:event, organizer_actor: actor) +event2 = insert(:event, organizer_actor: actor) +event3 = insert(:event, organizer_actor: actor) +event4 = insert(:event, organizer_actor: actor2) -participant = insert(:participant, actor: actor, event: event) +participant = insert(:participant, actor: actor, event: event, role: 4) +participant = insert(:participant, actor: actor, event: event2, role: 4) +participant = insert(:participant, actor: actor, event: event3, role: 4) +participant = insert(:participant, actor: actor2, event: event4, role: 4) +participant = insert(:participant, actor: actor, event: event4, role: 1) # Insert a group group = insert(:actor, type: :Group) diff --git a/test/support/factory.ex b/test/support/factory.ex index 3e52914ac..0fb645bf1 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -95,25 +95,29 @@ defmodule Mobilizon.Factory do def event_factory do actor = build(:actor) + start = Timex.now() + uuid = Ecto.UUID.generate() %Mobilizon.Events.Event{ title: sequence("Ceci est un événement"), description: "Ceci est une description avec une première phrase assez longue, puis sur une seconde ligne", - begins_on: nil, - ends_on: nil, + begins_on: start, + ends_on: Timex.shift(start, hours: 2), organizer_actor: actor, category: build(:category), physical_address: build(:address), visibility: :public, - url: "@#{actor.url}/#{Ecto.UUID.generate()}" + url: "#{actor.url}/#{uuid}", + uuid: uuid } end def participant_factory do %Mobilizon.Events.Participant{ event: build(:event), - actor: build(:actor) + actor: build(:actor), + role: 0 } end From 617b59c0380478909ab9212ba06346ccc24ac2db Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 24 Jan 2019 15:06:38 +0100 Subject: [PATCH 2/4] Bump rdf for Elixir 1.8 compat Signed-off-by: Thomas Citharel --- mix.exs | 2 +- mix.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mix.exs b/mix.exs index 6c020b724..45030d545 100644 --- a/mix.exs +++ b/mix.exs @@ -70,7 +70,7 @@ defmodule Mobilizon.Mixfile do {:icalendar, "~> 0.6"}, {:exgravatar, "~> 2.0.1"}, {:httpoison, "~> 1.0"}, - {:json_ld, "~> 0.2"}, + {:json_ld, "~> 0.3"}, {:jason, "~> 1.0"}, {:ex_crypto, "~> 0.9.0"}, {:http_sign, "~> 0.1.1"}, diff --git a/mix.lock b/mix.lock index 9cb404dc3..829930803 100644 --- a/mix.lock +++ b/mix.lock @@ -80,7 +80,7 @@ "poolboy": {:hex, :poolboy, "1.5.1", "6b46163901cfd0a1b43d692657ed9d7e599853b3b21b95ae5ae0a777cf9b6ca8", [:rebar], [], "hexpm"}, "postgrex": {:hex, :postgrex, "0.13.5", "3d931aba29363e1443da167a4b12f06dcd171103c424de15e5f3fc2ba3e6d9c5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 1.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"}, "ranch": {:hex, :ranch, "1.3.2", "e4965a144dc9fbe70e5c077c65e73c57165416a901bd02ea899cfd95aa890986", [:rebar3], [], "hexpm"}, - "rdf": {:hex, :rdf, "0.5.3", "2990ce6ca55602db9c170e6258bf3fa39b0e4be3d49b1c09c00a740bc387029f", [:mix], [{:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"}, + "rdf": {:hex, :rdf, "0.5.4", "57e09d4adfe7646fe0c3514b703b76eaf29d537b250b36abae75e66d7e5920cf", [:mix], [{:decimal, "~> 1.5", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm"}, "rsa_ex": {:hex, :rsa_ex, "0.4.0", "e28dd7dc5236e156df434af0e4aa822384c8866c928e17b785d4edb7c253b558", [:mix], [], "hexpm"}, "slugger": {:hex, :slugger, "0.3.0", "efc667ab99eee19a48913ccf3d038b1fb9f165fa4fbf093be898b8099e61b6ed", [:mix], [], "hexpm"}, "socket": {:hex, :socket, "0.3.13", "98a2ab20ce17f95fb512c5cadddba32b57273e0d2dba2d2e5f976c5969d0c632", [:mix], [], "hexpm"}, From c660210439a26cdd3d1abc287ccbf4ee09a5d838 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 24 Jan 2019 15:23:27 +0100 Subject: [PATCH 3/4] Fix tests Signed-off-by: Thomas Citharel --- lib/mobilizon_web/resolvers/event.ex | 3 +-- lib/mobilizon_web/resolvers/person.ex | 4 ++-- mix.exs | 4 ++-- mix.lock | 4 ++-- test/mobilizon/actors/actors_test.exs | 14 +++++++------- test/mobilizon/events/events_test.exs | 4 +++- .../service/activity_pub/transmogrifier_test.exs | 2 +- .../resolvers/event_resolver_test.exs | 12 ++++++++++-- .../mobilizon_web/resolvers/user_resolver_test.exs | 9 ++++++--- 9 files changed, 34 insertions(+), 22 deletions(-) diff --git a/lib/mobilizon_web/resolvers/event.ex b/lib/mobilizon_web/resolvers/event.ex index c3784a240..99c6da25a 100644 --- a/lib/mobilizon_web/resolvers/event.ex +++ b/lib/mobilizon_web/resolvers/event.ex @@ -4,7 +4,6 @@ defmodule MobilizonWeb.Resolvers.Event do """ alias Mobilizon.Service.ActivityPub alias Mobilizon.Activity - alias Mobilizon.Actors alias Mobilizon.Events.Event # We limit the max number of events that can be retrieved @@ -79,7 +78,7 @@ defmodule MobilizonWeb.Resolvers.Event do @doc """ Create an event """ - def create_event(_parent, args, %{context: %{current_user: user}}) do + def create_event(_parent, args, %{context: %{current_user: _user}}) do with {:ok, %Activity{data: %{"object" => %{"type" => "Event"} = object}}} <- MobilizonWeb.API.Events.create_event(args) do {:ok, diff --git a/lib/mobilizon_web/resolvers/person.ex b/lib/mobilizon_web/resolvers/person.ex index ba53eee2d..347a70a7e 100644 --- a/lib/mobilizon_web/resolvers/person.ex +++ b/lib/mobilizon_web/resolvers/person.ex @@ -52,7 +52,7 @@ defmodule MobilizonWeb.Resolvers.Person do {:error, "You need to be logged-in to view your list of identities"} end - def create_person(_parent, %{preferred_username: preferred_username} = args, %{ + def create_person(_parent, %{preferred_username: _preferred_username} = args, %{ context: %{current_user: user} }) do args = Map.put(args, :user_id, user.id) @@ -60,7 +60,7 @@ defmodule MobilizonWeb.Resolvers.Person do with {:ok, %Actor{} = new_person} <- Actors.new_person(args) do {:ok, new_person} else - {:error, %Ecto.Changeset{} = e} -> + {:error, %Ecto.Changeset{} = _e} -> {:error, "Unable to create a profile with this username"} end end diff --git a/mix.exs b/mix.exs index 45030d545..dd375869a 100644 --- a/mix.exs +++ b/mix.exs @@ -56,8 +56,8 @@ defmodule Mobilizon.Mixfile do {:phoenix_html, "~> 2.10"}, {:gettext, "~> 0.11"}, {:cowboy, "~> 1.0"}, - {:guardian, "~> 1.0"}, - {:guardian_db, "~> 1.0"}, + {:guardian, "~> 1.2"}, + {:guardian_db, "~> 1.1"}, {:comeonin, "~> 4.0"}, {:argon2_elixir, "~> 1.2"}, {:cors_plug, "~> 1.2"}, diff --git a/mix.lock b/mix.lock index 829930803..a09266004 100644 --- a/mix.lock +++ b/mix.lock @@ -45,7 +45,7 @@ "geo_postgis": {:hex, :geo_postgis, "2.1.0", "e0640d18276cb1dd58aeae3f5eed9a61641a5110901e1e35d0d662031d936b33", [:mix], [{:geo, "~> 3.0", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.13", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm"}, "geolix": {:hex, :geolix, "0.17.0", "8f3f4068be08599912de67ae24372a6c148794a0152f9f83ffd5a2ffcb21d29a", [:mix], [{:mmdb2_decoder, "~> 0.3.0", [hex: :mmdb2_decoder, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.0", [hex: :poolboy, repo: "hexpm", optional: false]}], "hexpm"}, "gettext": {:hex, :gettext, "0.16.1", "e2130b25eebcbe02bb343b119a07ae2c7e28bd4b146c4a154da2ffb2b3507af2", [:mix], [], "hexpm"}, - "guardian": {:hex, :guardian, "1.1.1", "be14c4007eaf05268251ae114030cb7237ed9a9631c260022f020164ff4ed733", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.0 or ~> 1.2 or ~> 1.3", [hex: :phoenix, repo: "hexpm", optional: true]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm"}, + "guardian": {:hex, :guardian, "1.2.1", "bdc8dd3dbf0fb7216cb6f91c11831faa1a64d39cdaed9a611e37f2413e584983", [:mix], [{:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.3", [hex: :phoenix, repo: "hexpm", optional: true]}, {:plug, "~> 1.3.3 or ~> 1.4", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm"}, "guardian_db": {:hex, :guardian_db, "1.1.0", "45ab94206cce38f7443dc27de6dc52966ccbdeff65ca1b1f11a6d8f3daceb556", [:mix], [{:ecto, "~> 2.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:guardian, "~> 1.0", [hex: :guardian, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.13", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm"}, "hackney": {:hex, :hackney, "1.14.3", "b5f6f5dcc4f1fba340762738759209e21914516df6be440d85772542d4a5e412", [:rebar3], [{:certifi, "2.4.2", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.4", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, "http_sign": {:hex, :http_sign, "0.1.1", "b16edb83aa282892f3271f9a048c155e772bf36e15700ab93901484c55f8dd10", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, @@ -53,7 +53,7 @@ "icalendar": {:hex, :icalendar, "0.7.0", "6acf28c7e38ad1c4515c59e336878fb78bb646c8aa70d2ee3786ea194711a7b7", [:mix], [{:timex, "~> 3.0", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm"}, "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"}, - "jose": {:hex, :jose, "1.8.4", "7946d1e5c03a76ac9ef42a6e6a20001d35987afd68c2107bcd8f01a84e75aa73", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm"}, + "jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm"}, "json_ld": {:hex, :json_ld, "0.3.0", "92f508ca831b9e4530e3e6c950976fdafcf26323e6817c325b3e1ee78affc4bd", [:mix], [{:jason, "~> 1.1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:rdf, "~> 0.5", [hex: :rdf, repo: "hexpm", optional: false]}], "hexpm"}, "jsx": {:hex, :jsx, "2.8.3", "a05252d381885240744d955fbe3cf810504eb2567164824e19303ea59eef62cf", [:mix, :rebar3], [], "hexpm"}, "kronky": {:hex, :kronky, "0.5.0", "b2038c267f02b297044cb574f542fa96763278a88b32a97d0c37bde95c63c13b", [:mix], [{:absinthe, "~> 1.3", [hex: :absinthe, repo: "hexpm", optional: false]}, {:ecto, ">= 2.1.4", [hex: :ecto, repo: "hexpm", optional: false]}], "hexpm"}, diff --git a/test/mobilizon/actors/actors_test.exs b/test/mobilizon/actors/actors_test.exs index e921192f3..53819cf63 100644 --- a/test/mobilizon/actors/actors_test.exs +++ b/test/mobilizon/actors/actors_test.exs @@ -69,14 +69,14 @@ defmodule Mobilizon.ActorsTest do assert actor_id == Actors.get_actor_for_user(user).id end - test "get_actor_with_everything!/1 returns the actor with it's organized events", %{ + test "get_actor_with_everything/1 returns the actor with it's organized events", %{ actor: actor } do - assert Actors.get_actor_with_everything!(actor.id).organized_events == [] + assert Actors.get_actor_with_everything(actor.id).organized_events == [] event = insert(:event, organizer_actor: actor) event_found_id = - Actors.get_actor_with_everything!(actor.id).organized_events |> hd |> Map.get(:id) + Actors.get_actor_with_everything(actor.id).organized_events |> hd |> Map.get(:id) assert event_found_id == event.id end @@ -573,15 +573,15 @@ defmodule Mobilizon.ActorsTest do test "follow/3 makes an actor follow another", %{actor: actor, target_actor: target_actor} do # Preloading followers/followings - actor = Actors.get_actor_with_everything!(actor.id) - target_actor = Actors.get_actor_with_everything!(target_actor.id) + actor = Actors.get_actor_with_everything(actor.id) + target_actor = Actors.get_actor_with_everything(target_actor.id) {:ok, follower} = Actor.follow(target_actor, actor) assert follower.actor.id == actor.id # Referesh followers/followings - actor = Actors.get_actor_with_everything!(actor.id) - target_actor = Actors.get_actor_with_everything!(target_actor.id) + actor = Actors.get_actor_with_everything(actor.id) + target_actor = Actors.get_actor_with_everything(target_actor.id) assert target_actor.followers |> Enum.map(& &1.actor_id) == [actor.id] assert actor.followings |> Enum.map(& &1.target_actor_id) == [target_actor.id] diff --git a/test/mobilizon/events/events_test.exs b/test/mobilizon/events/events_test.exs index d16e56e50..26202f671 100644 --- a/test/mobilizon/events/events_test.exs +++ b/test/mobilizon/events/events_test.exs @@ -9,7 +9,9 @@ defmodule Mobilizon.EventsTest do begins_on: "2010-04-17 14:00:00.000000Z", description: "some description", ends_on: "2010-04-17 14:00:00.000000Z", - title: "some title" + title: "some title", + url: "some url", + uuid: "b5126423-f1af-43e4-a923-002a03003ba4" } describe "events" do diff --git a/test/mobilizon/service/activity_pub/transmogrifier_test.exs b/test/mobilizon/service/activity_pub/transmogrifier_test.exs index ce269a15f..450321cf2 100644 --- a/test/mobilizon/service/activity_pub/transmogrifier_test.exs +++ b/test/mobilizon/service/activity_pub/transmogrifier_test.exs @@ -176,7 +176,7 @@ defmodule Mobilizon.Service.ActivityPub.TransmogrifierTest do assert data["type"] == "Follow" assert data["id"] == "https://social.tcit.fr/users/tcit#follows/2" - actor = Actors.get_actor_with_everything!(actor.id) + actor = Actors.get_actor_with_everything(actor.id) assert Actor.following?(Actors.get_actor_by_url!(data["actor"], true), actor) end diff --git a/test/mobilizon_web/resolvers/event_resolver_test.exs b/test/mobilizon_web/resolvers/event_resolver_test.exs index 80a3ad207..d98124444 100644 --- a/test/mobilizon_web/resolvers/event_resolver_test.exs +++ b/test/mobilizon_web/resolvers/event_resolver_test.exs @@ -5,7 +5,13 @@ defmodule MobilizonWeb.Resolvers.EventResolverTest do alias MobilizonWeb.AbsintheHelpers import Mobilizon.Factory - @event %{description: "some body", title: "some title", begins_on: Ecto.DateTime.utc()} + @event %{ + description: "some body", + title: "some title", + begins_on: Ecto.DateTime.utc(), + uuid: "b5126423-f1af-43e4-a923-002a03003ba4", + url: "some url" + } setup %{conn: conn} do {:ok, %User{default_actor: %Actor{} = actor} = user} = @@ -117,7 +123,7 @@ defmodule MobilizonWeb.Resolvers.EventResolverTest do title: "come to my event", description: "it will be fine", begins_on: "#{DateTime.utc_now() |> DateTime.to_iso8601()}", - organizer_actor_username: "#{actor.preferred_username}", + organizer_actor_id: "#{actor.id}", category: "#{category.title}" ) { title, @@ -131,6 +137,8 @@ defmodule MobilizonWeb.Resolvers.EventResolverTest do |> auth_conn(user) |> post("/api", AbsintheHelpers.mutation_skeleton(mutation)) + require Logger + Logger.error(inspect(json_response(res, 200))) assert json_response(res, 200)["data"]["createEvent"]["title"] == "come to my event" end diff --git a/test/mobilizon_web/resolvers/user_resolver_test.exs b/test/mobilizon_web/resolvers/user_resolver_test.exs index 54d26bbaa..d28d669fc 100644 --- a/test/mobilizon_web/resolvers/user_resolver_test.exs +++ b/test/mobilizon_web/resolvers/user_resolver_test.exs @@ -336,7 +336,8 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do context.conn |> post("/api", AbsintheHelpers.mutation_skeleton(mutation)) - assert hd(json_response(res, 200)["errors"])["message"] == "password_too_short" + assert hd(json_response(res, 200)["errors"])["message"] == + "The password you have choosen is too short. Please make sure your password contains at least 6 charaters." end test "test reset_password/3 with an invalid token", context do @@ -361,7 +362,8 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do context.conn |> post("/api", AbsintheHelpers.mutation_skeleton(mutation)) - assert hd(json_response(res, 200)["errors"])["message"] == "invalid_token" + assert hd(json_response(res, 200)["errors"])["message"] == + "The token you provided is invalid. Make sure that the URL is exactly the one provided inside the email you got." end end @@ -431,7 +433,8 @@ defmodule MobilizonWeb.Resolvers.UserResolverTest do context.conn |> post("/api", AbsintheHelpers.mutation_skeleton(mutation)) - assert hd(json_response(res, 200)["errors"])["message"] == "Impossible to authenticate" + assert hd(json_response(res, 200)["errors"])["message"] == + "Impossible to authenticate, either your email or password are invalid." end test "test login_user/3 with invalid email", context do From b264a49c23c8c4bba23670fa79a0b57874cea7ea Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Thu, 24 Jan 2019 15:57:45 +0100 Subject: [PATCH 4/4] Fix js warnings Signed-off-by: Thomas Citharel --- js/src/components/NavBar.vue | 25 ++++++++++++------------- js/src/views/Home.vue | 4 ++-- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/js/src/components/NavBar.vue b/js/src/components/NavBar.vue index b23ff9eb4..e9fc3917f 100644 --- a/js/src/components/NavBar.vue +++ b/js/src/components/NavBar.vue @@ -28,7 +28,7 @@
@@ -43,27 +43,27 @@ diff --git a/js/src/views/Home.vue b/js/src/views/Home.vue index 04dca316e..3025b60f2 100644 --- a/js/src/views/Home.vue +++ b/js/src/views/Home.vue @@ -1,6 +1,6 @@