diff --git a/js/Makefile b/js/Makefile index 315d4ce2..c5517045 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 1e05c10c..0a5d103d 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 eeec4ed9..1a7b3233 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 00000000..bdb2ce21 --- /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 27e6f83c..86e3871f 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 bd3b4b16..ac3070a2 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 0f9b06a1..00000000 --- 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 0c468c26..00000000 --- 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 f6b2b294..00000000 --- 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 47ce03c7..00000000 --- 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 114521dc..00000000 --- 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 db44bb54..00000000 --- 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 886d2809..00000000 --- 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 b71fef5e..00000000 --- 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 a9d2a1f7..00000000 --- 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 c36ddec5..00000000 --- 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 072f4808..00000000 --- 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 f24f5b4d..00000000 --- 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 cb23cc4e..00000000 --- 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 a7f44382..00000000 --- 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 00000000..04244a6f --- /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 8e3ba040..00000000 --- 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 fb4dfa79..00000000 --- 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 aec8085c..00000000 --- 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 00000000..895aee0c --- /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 c35a5b13..00000000 --- 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 0615fad0..00000000 --- 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 82a08fe5..00000000 --- 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 42728fd7..e9fc3917 100644 --- a/js/src/components/NavBar.vue +++ b/js/src/components/NavBar.vue @@ -1,150 +1,98 @@ - - diff --git a/js/src/components/PageNotFound.vue b/js/src/components/PageNotFound.vue deleted file mode 100644 index 037ee27a..00000000 --- a/js/src/components/PageNotFound.vue +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/js/src/graphql/actor.ts b/js/src/graphql/actor.ts index 45c54ca9..6fa5a65a 100644 --- a/js/src/graphql/actor.ts +++ b/js/src/graphql/actor.ts @@ -1,14 +1,9 @@ import gql from 'graphql-tag'; -export const FETCH_ACTOR = gql` +export const FETCH_PERSON = gql` query($name:String!) { - actor(preferredUsername: $name) { + person(preferredUsername: $name) { url, - outboxUrl, - inboxUrl, - followingUrl, - followersUrl, - sharedInboxUrl, name, domain, summary, @@ -18,22 +13,36 @@ query($name:String!) { bannerUrl, organizedEvents { uuid, - title, - description, - organizer_actor { - avatarUrl, - preferred_username, - name, - } + title }, } } `; -export const LOGGED_ACTOR = gql` +export const LOGGED_PERSON = gql` query { - loggedActor { + loggedPerson { + id, avatarUrl, preferredUsername, } }`; + +export const IDENTITIES = gql` +query { + identities { + avatarUrl, + preferredUsername, + name + } +}`; + +export const CREATE_PERSON = gql` +mutation CreatePerson($preferredUsername: String!) { + createPerson(preferredUsername: $preferredUsername) { + preferredUsername, + name, + avatarUrl + } +} +` \ No newline at end of file diff --git a/js/src/graphql/event.ts b/js/src/graphql/event.ts index 1c2ef0b0..a3be313f 100644 --- a/js/src/graphql/event.ts +++ b/js/src/graphql/event.ts @@ -3,13 +3,14 @@ import gql from 'graphql-tag'; export const FETCH_EVENT = gql` query($uuid:UUID!) { event(uuid: $uuid) { + id, uuid, url, local, title, description, - begins_on, - ends_on, + beginsOn, + endsOn, status, visibility, thumbnail, @@ -22,11 +23,11 @@ export const FETCH_EVENT = gql` preferredUsername, name, }, - attributedTo { - avatarUrl, - preferredUsername, - name, - }, + # attributedTo { + # # avatarUrl, + # preferredUsername, + # name, + # }, participants { actor { avatarUrl, @@ -45,13 +46,14 @@ export const FETCH_EVENT = gql` export const FETCH_EVENTS = gql` query { events { + id, uuid, url, local, title, description, - begins_on, - ends_on, + beginsOn, + endsOn, status, visibility, thumbnail, @@ -72,16 +74,24 @@ export const FETCH_EVENTS = gql` category { title, }, + participants { + role, + actor { + preferredUsername, + avatarUrl, + name + } } } +} `; export const CREATE_EVENT = gql` mutation CreateEvent( $title: String!, $description: String!, - $organizerActorId: Int!, - $categoryId: Int!, + $organizerActorId: String!, + $category: String!, $beginsOn: DateTime! ) { createEvent( @@ -89,8 +99,12 @@ export const CREATE_EVENT = gql` description: $description, beginsOn: $beginsOn, organizerActorId: $organizerActorId, - categoryId: $categoryId - ) + category: $category + ) { + id, + uuid, + title + } } `; @@ -106,3 +120,15 @@ export const EDIT_EVENT = gql` } } `; + +export const JOIN_EVENT = gql` + mutation JoinEvent( + $uuid: String!, + $username: String! + ) { + joinEvent( + uuid: $uuid, + username: $username + ) +} +`; diff --git a/js/src/i18n/locale/en_US/LC_MESSAGES/app.po b/js/src/i18n/locale/en_US/LC_MESSAGES/app.po index b8924e02..a4ee60e2 100644 --- a/js/src/i18n/locale/en_US/LC_MESSAGES/app.po +++ b/js/src/i18n/locale/en_US/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: mobilizon 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-24 16:25+0200\n" +"POT-Creation-Date: 2019-01-17 16:08+0100\n" "PO-Revision-Date: 2018-10-24 16:25+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,14 +17,178 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: src/components/Account/Register.vue:70 +#: src/App.vue:8 +msgid "© The Mobilizon Contributors %{date} - Made with Elixir, Phoenix, VueJS & with some love and some weeks" +msgstr "" + +#: src/components/Account/Register.vue:89 msgid "A validation email was sent to %{email}" msgstr "A validation email was sent to %{email}" -#: src/components/Account/Register.vue:71 +#: src/components/Account/Register.vue:26 +msgid "About this instance" +msgstr "" + +#: src/components/Account/Register.vue:92 msgid "Before you can login, you need to click on the link inside it to validate your account" msgstr "Before you can login, you need to click on the link inside it to validate your account" -#: src/components/Home.vue:14 +#: src/components/Category/Create.vue:7 +msgid "Create a new category" +msgstr "" + +#: src/components/Category/Create.vue:34 +msgid "Create category" +msgstr "" + +#: src/components/Account/Register.vue:16 +msgid "Create your communities and your events" +msgstr "" + +#: src/components/Account/Profile.vue:48 src/components/Category/List.vue:21 +#: src/components/Event/Event.vue:41 +msgid "Delete" +msgstr "" + +#: src/components/Account/Register.vue:80 +msgid "Didn't receive the instructions ?" +msgstr "" + +#: src/components/Event/Event.vue:36 +msgid "Download" +msgstr "" + +#: src/components/Event/Event.vue:31 +msgid "Edit" +msgstr "" + +#: src/components/Account/Validate.vue:8 +msgid "Error while validating account" +msgstr "" + +#: src/components/Category/List.vue:18 +msgid "Explore" +msgstr "" + +#: src/components/Account/Register.vue:14 +msgid "Features" +msgstr "" + +#: src/components/Account/Login.vue:46 +msgid "Forgot your password ?" +msgstr "" + +#: src/components/Account/Register.vue:20 +msgid "" +"Learn more on\n" +" joinmobilizon.org" +msgstr "" + +#: src/components/NavBar.vue:26 +msgid "Log in" +msgstr "" + +#: src/components/Account/Login.vue:38 +msgid "Login" +msgstr "" + +#: src/components/Account/Register.vue:32 +msgid "meditate a bit" +msgstr "" + +#: src/components/Home.vue:33 +msgid "No events found" +msgstr "" + +#: src/components/Account/Profile.vue:29 +msgid "Organized" +msgstr "" + +#: src/components/Account/Register.vue:17 +msgid "Other stuff…" +msgstr "" + +#: src/components/Account/SendPasswordReset.vue:4 +msgid "Password reset" +msgstr "" + +#: src/components/Account/Register.vue:31 +msgid "Please be nice to each other" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:21 +#: src/components/Account/SendPasswordReset.vue:22 +msgid "Please check you spam folder if you didn't receive the email." +msgstr "" + +#: src/components/Account/Register.vue:35 +msgid "Please read the full rules" +msgstr "" + +#: src/components/Account/Register.vue:72 src/components/Home.vue:9 msgid "Register" msgstr "Register" + +#: src/components/Account/Register.vue:5 +msgid "Register an account on Mobilizon!" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:4 +msgid "Resend confirmation email" +msgstr "" + +#: src/components/Account/PasswordReset.vue:26 +msgid "Reset my password" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:11 +msgid "Send confirmation email again" +msgstr "" + +#: src/components/Account/SendPasswordReset.vue:12 +msgid "Send email to reset my password" +msgstr "" + +#: src/components/NavBar.vue:22 +msgid "Sign up" +msgstr "" + +#: src/components/Account/Profile.vue:43 +msgid "User logout" +msgstr "" + +#: src/components/Event/Event.vue:50 +msgid "Vous avez annoncé aller à cet événement." +msgstr "" + +#: src/components/Event/Event.vue:46 +msgid "Vous êtes organisateur de cet événement." +msgstr "" + +#: src/components/Account/SendPasswordReset.vue:17 +msgid "We just sent an email to %{email}" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:16 +msgid "We just sent another confirmation email to %{email}" +msgstr "" + +#: src/components/Home.vue:16 +msgid "Welcome back %{username}" +msgstr "" + +#: src/components/Account/Login.vue:4 +msgid "Welcome back!" +msgstr "" + +#: src/components/Account/Validate.vue:12 +msgid "Your account has been validated" +msgstr "" + +#: src/components/Account/Validate.vue:3 +msgid "Your account is being validated" +msgstr "" + +#: src/components/Account/Register.vue:28 +msgid "Your local administrator resumed it's policy:" +msgstr "" diff --git a/js/src/i18n/locale/en_US/LC_MESSAGES/app.po~ b/js/src/i18n/locale/en_US/LC_MESSAGES/app.po~ new file mode 100644 index 00000000..b8924e02 --- /dev/null +++ b/js/src/i18n/locale/en_US/LC_MESSAGES/app.po~ @@ -0,0 +1,30 @@ +# English translations for mobilizon package. +# Copyright (C) 2018 THE mobilizon'S COPYRIGHT HOLDER +# This file is distributed under the same license as the mobilizon package. +# Automatically generated, 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: mobilizon 0.1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-24 16:25+0200\n" +"PO-Revision-Date: 2018-10-24 16:25+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/components/Account/Register.vue:70 +msgid "A validation email was sent to %{email}" +msgstr "A validation email was sent to %{email}" + +#: src/components/Account/Register.vue:71 +msgid "Before you can login, you need to click on the link inside it to validate your account" +msgstr "Before you can login, you need to click on the link inside it to validate your account" + +#: src/components/Home.vue:14 +msgid "Register" +msgstr "Register" diff --git a/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po b/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po index 45b56075..6e03112b 100644 --- a/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po +++ b/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: mobilizon 0.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-24 16:25+0200\n" +"POT-Creation-Date: 2019-01-17 16:08+0100\n" "PO-Revision-Date: 2018-10-24 16:25+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -17,14 +17,178 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: src/components/Account/Register.vue:70 +#: src/App.vue:8 +msgid "© The Mobilizon Contributors %{date} - Made with Elixir, Phoenix, VueJS & with some love and some weeks" +msgstr "" + +#: src/components/Account/Register.vue:89 msgid "A validation email was sent to %{email}" msgstr "" -#: src/components/Account/Register.vue:71 +#: src/components/Account/Register.vue:26 +msgid "About this instance" +msgstr "" + +#: src/components/Account/Register.vue:92 msgid "Before you can login, you need to click on the link inside it to validate your account" msgstr "" -#: src/components/Home.vue:14 +#: src/components/Category/Create.vue:7 +msgid "Create a new category" +msgstr "" + +#: src/components/Category/Create.vue:34 +msgid "Create category" +msgstr "" + +#: src/components/Account/Register.vue:16 +msgid "Create your communities and your events" +msgstr "" + +#: src/components/Account/Profile.vue:48 src/components/Category/List.vue:21 +#: src/components/Event/Event.vue:41 +msgid "Delete" +msgstr "" + +#: src/components/Account/Register.vue:80 +msgid "Didn't receive the instructions ?" +msgstr "" + +#: src/components/Event/Event.vue:36 +msgid "Download" +msgstr "" + +#: src/components/Event/Event.vue:31 +msgid "Edit" +msgstr "" + +#: src/components/Account/Validate.vue:8 +msgid "Error while validating account" +msgstr "" + +#: src/components/Category/List.vue:18 +msgid "Explore" +msgstr "" + +#: src/components/Account/Register.vue:14 +msgid "Features" +msgstr "" + +#: src/components/Account/Login.vue:46 +msgid "Forgot your password ?" +msgstr "" + +#: src/components/Account/Register.vue:20 +msgid "" +"Learn more on\n" +" joinmobilizon.org" +msgstr "" + +#: src/components/NavBar.vue:26 +msgid "Log in" +msgstr "" + +#: src/components/Account/Login.vue:38 +msgid "Login" +msgstr "" + +#: src/components/Account/Register.vue:32 +msgid "meditate a bit" +msgstr "" + +#: src/components/Home.vue:33 +msgid "No events found" +msgstr "" + +#: src/components/Account/Profile.vue:29 +msgid "Organized" +msgstr "" + +#: src/components/Account/Register.vue:17 +msgid "Other stuff…" +msgstr "" + +#: src/components/Account/SendPasswordReset.vue:4 +msgid "Password reset" +msgstr "" + +#: src/components/Account/Register.vue:31 +msgid "Please be nice to each other" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:21 +#: src/components/Account/SendPasswordReset.vue:22 +msgid "Please check you spam folder if you didn't receive the email." +msgstr "" + +#: src/components/Account/Register.vue:35 +msgid "Please read the full rules" +msgstr "" + +#: src/components/Account/Register.vue:72 src/components/Home.vue:9 msgid "Register" msgstr "S'inscrire" + +#: src/components/Account/Register.vue:5 +msgid "Register an account on Mobilizon!" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:4 +msgid "Resend confirmation email" +msgstr "" + +#: src/components/Account/PasswordReset.vue:26 +msgid "Reset my password" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:11 +msgid "Send confirmation email again" +msgstr "" + +#: src/components/Account/SendPasswordReset.vue:12 +msgid "Send email to reset my password" +msgstr "" + +#: src/components/NavBar.vue:22 +msgid "Sign up" +msgstr "" + +#: src/components/Account/Profile.vue:43 +msgid "User logout" +msgstr "" + +#: src/components/Event/Event.vue:50 +msgid "Vous avez annoncé aller à cet événement." +msgstr "" + +#: src/components/Event/Event.vue:46 +msgid "Vous êtes organisateur de cet événement." +msgstr "" + +#: src/components/Account/SendPasswordReset.vue:17 +msgid "We just sent an email to %{email}" +msgstr "" + +#: src/components/Account/ResendConfirmation.vue:16 +msgid "We just sent another confirmation email to %{email}" +msgstr "" + +#: src/components/Home.vue:16 +msgid "Welcome back %{username}" +msgstr "" + +#: src/components/Account/Login.vue:4 +msgid "Welcome back!" +msgstr "" + +#: src/components/Account/Validate.vue:12 +msgid "Your account has been validated" +msgstr "" + +#: src/components/Account/Validate.vue:3 +msgid "Your account is being validated" +msgstr "" + +#: src/components/Account/Register.vue:28 +msgid "Your local administrator resumed it's policy:" +msgstr "" diff --git a/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po~ b/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po~ index 131065ac..45b56075 100644 --- a/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po~ +++ b/js/src/i18n/locale/fr_FR/LC_MESSAGES/app.po~ @@ -11,7 +11,7 @@ msgstr "" "PO-Revision-Date: 2018-10-24 16:25+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" -"Language: fr\n" +"Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" diff --git a/js/src/main.ts b/js/src/main.ts index 69290872..81d7a0df 100644 --- a/js/src/main.ts +++ b/js/src/main.ts @@ -3,10 +3,9 @@ import Vue from 'vue'; // import * as VueGoogleMaps from 'vue2-google-maps'; import VueMarkdown from 'vue-markdown'; -import Vuetify from 'vuetify'; +import Buefy from 'buefy' +import 'buefy/dist/buefy.css'; import GetTextPlugin from 'vue-gettext'; -import 'material-design-icons/iconfont/material-icons.css'; -import 'vuetify/dist/vuetify.min.css'; import App from '@/App.vue'; import router from '@/router'; import { apolloProvider } from './vue-apollo'; @@ -16,7 +15,9 @@ const translations = require('@/i18n/translations.json'); Vue.config.productionTip = false; Vue.use(VueMarkdown); -Vue.use(Vuetify); +Vue.use(Buefy, { + defaultContainerElement: '#mobilizon' +}); const language = (window.navigator as any).userLanguage || window.navigator.language; diff --git a/js/src/router/index.ts b/js/src/router/index.ts index 1bd4a0e3..389cffbf 100644 --- a/js/src/router/index.ts +++ b/js/src/router/index.ts @@ -1,24 +1,24 @@ import Vue from 'vue'; import Router from 'vue-router'; -import PageNotFound from '@/components/PageNotFound.vue'; -import Home from '@/components/Home.vue'; -import Event from '@/components/Event/Event.vue'; -import EventList from '@/components/Event/EventList.vue'; -import Location from '@/components/Location.vue'; -import CreateEvent from '@/components/Event/Create.vue'; -import CategoryList from '@/components/Category/List.vue'; -import CreateCategory from '@/components/Category/Create.vue'; -import Register from '@/components/Account/Register.vue'; -import Login from '@/components/Account/Login.vue'; -import Validate from '@/components/Account/Validate.vue'; -import ResendConfirmation from '@/components/Account/ResendConfirmation.vue'; -import SendPasswordReset from '@/components/Account/SendPasswordReset.vue'; -import PasswordReset from '@/components/Account/PasswordReset.vue'; -import Account from '@/components/Account/Account.vue'; -import CreateGroup from '@/components/Group/Create.vue'; -import Group from '@/components/Group/Group.vue'; -import GroupList from '@/components/Group/GroupList.vue'; -import Identities from '../components/Account/Identities.vue'; +import PageNotFound from '@/views/PageNotFound.vue'; +import Home from '@/views/Home.vue'; +import Event from '@/views/Event/Event.vue'; +import EventList from '@/views/Event/EventList.vue'; +import Location from '@/views/Location.vue'; +import CreateEvent from '@/views/Event/Create.vue'; +import CategoryList from '@/views/Category/List.vue'; +import CreateCategory from '@/views/Category/Create.vue'; +import Register from '@/views/Account/Register.vue'; +import Login from '@/views/User/Login.vue'; +import Validate from '@/views/User/Validate.vue'; +import ResendConfirmation from '@/views/User/ResendConfirmation.vue'; +import SendPasswordReset from '@/views/User/SendPasswordReset.vue'; +import PasswordReset from '@/views/User/PasswordReset.vue'; +import Profile from '@/views/Account/Profile.vue'; +import CreateGroup from '@/views/Group/Create.vue'; +import Group from '@/views/Group/Group.vue'; +import GroupList from '@/views/Group/GroupList.vue'; +import Identities from '@/views/Account/Identities.vue'; Vue.use(Router); @@ -45,7 +45,7 @@ const router = new Router({ meta: { requiredAuth: true }, }, { - path: '/events/:id(\\d+)/edit', + path: '/events/:id/edit', name: 'EditEvent', component: CreateEvent, props: true, @@ -124,7 +124,7 @@ const router = new Router({ meta: { requiredAuth: false }, }, { - path: '/group-create', + path: '/groups/create', name: 'CreateGroup', component: CreateGroup, meta: { requiredAuth: true }, @@ -138,8 +138,8 @@ const router = new Router({ }, { path: '/@:name', - name: 'Account', - component: Account, + name: 'Profile', + component: Profile, props: true, meta: { requiredAuth: false }, }, diff --git a/js/src/types/actor.model.ts b/js/src/types/actor.model.ts new file mode 100644 index 00000000..78891e49 --- /dev/null +++ b/js/src/types/actor.model.ts @@ -0,0 +1,29 @@ +export interface IActor { + id: string; + url: string; + name: string; + domain: string; + summary: string; + preferredUsername: string; + suspended: boolean; + avatarUrl: string; + bannerUrl: string; +} + +export interface IPerson extends IActor { + +} + +export interface IGroup extends IActor { + members: IMember[]; +} + +export enum MemberRole { + PENDING, MEMBER, MODERATOR, ADMIN +} + +export interface IMember { + role: MemberRole; + parent: IGroup; + actor: IActor; +} \ No newline at end of file diff --git a/js/src/types/event.model.ts b/js/src/types/event.model.ts new file mode 100644 index 00000000..9e5b25a4 --- /dev/null +++ b/js/src/types/event.model.ts @@ -0,0 +1,46 @@ +import { IActor } from "./actor.model"; + +export enum EventStatus { + TENTATIVE, CONFIRMED, CANCELLED +} + +export enum EventVisibility { + PUBLIC, PRIVATE +} + +export enum ParticipantRole { + +} + +export interface ICategory { + title: string; + description: string; + picture: string; +} + +export interface IParticipant { + role: ParticipantRole, + actor: IActor, + event: IEvent +} + +export interface IEvent { + uuid: string; + url: string; + local: boolean; + title: string; + description: string; + begins_on: Date; + ends_on: Date; + status: EventStatus; + visibility: EventVisibility; + thumbnail: string; + large_image: string; + publish_at: Date; + // online_address: Adress; + // phone_address: string; + organizerActor: IActor; + attributedTo: IActor; + participants: IParticipant[]; + category: ICategory; +} \ No newline at end of file diff --git a/js/src/views/Account/Identities.vue b/js/src/views/Account/Identities.vue new file mode 100644 index 00000000..3b70a6bf --- /dev/null +++ b/js/src/views/Account/Identities.vue @@ -0,0 +1,92 @@ + + + diff --git a/js/src/views/Account/Profile.vue b/js/src/views/Account/Profile.vue new file mode 100644 index 00000000..a06f9d71 --- /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 00000000..543c23ff --- /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 00000000..6617bb72 --- /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 00000000..0fb1a6e7 --- /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 00000000..b22b24a0 --- /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 00000000..9863afee --- /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 00000000..be25f089 --- /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 00000000..fdf751e0 --- /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 00000000..01846827 --- /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 00000000..e5f5872a --- /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 00000000..3025b60f --- /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 00000000..0c0c7dd8 --- /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 00000000..14530ae3 --- /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 00000000..12c66129 --- /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 00000000..1b0eae57 --- /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 00000000..b0e56627 --- /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 00000000..6b75c8b3 --- /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 00000000..801a13a9 --- /dev/null +++ b/js/src/views/User/Validate.vue @@ -0,0 +1,59 @@ + + + diff --git a/js/tsconfig.json b/js/tsconfig.json index f28e98af..38ee4457 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 8972d000..8dacdfa5 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 dbc37865..576d799e 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 0b03c6cd..cd5fe478 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 6f36bcc4..58fa14ac 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 68c5f146..a9b0b426 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 a2587c08..09e79670 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 f75ea692..99c6da25 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 @@ -39,8 +38,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 """ @@ -79,16 +78,9 @@ 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}}} <- - 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 4163e2b8..347a70a7 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 e37d4bcc..10805922 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 afdac380..65487135 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 c3a05109..75725204 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 1dab3459..cf831623 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 46b11dec..24acaba5 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 0768ad06..61a4569f 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 2ff2192c..a0640924 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 13979a32..662096ab 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 84e8ee56..a24ceff0 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/mix.exs b/mix.exs index 6c020b72..dd375869 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"}, @@ -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 9cb404dc..a0926600 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"}, @@ -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"}, diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index 16117576..b1ccb7bb 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/mobilizon/actors/actors_test.exs b/test/mobilizon/actors/actors_test.exs index e921192f..53819cf6 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 d16e56e5..26202f67 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 ce269a15..450321cf 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 80a3ad20..d9812444 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 54d26bba..d28d669f 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 diff --git a/test/support/factory.ex b/test/support/factory.ex index 3e52914a..0fb645bf 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