From 6d0b7f32dc17b2812c3f789222b0a1a14517a585 Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Tue, 23 Jul 2019 22:59:17 +0800 Subject: [PATCH 1/8] Support for Wechat applet --- build_releases.sh | 4 +++ gulpfile.js | 34 ++++++++++++++++++- package-lock.json | 60 ++++++++++++---------------------- src/Parse.js | 4 +++ src/RESTController.js | 52 +++++++++++++++++++++++++++++ src/Storage.js | 2 ++ src/StorageController.weapp.js | 50 ++++++++++++++++++++++++++++ weapp.js | 1 + 8 files changed, 166 insertions(+), 41 deletions(-) create mode 100644 src/StorageController.weapp.js create mode 100644 weapp.js diff --git a/build_releases.sh b/build_releases.sh index a072cdf21..d82dbfe20 100755 --- a/build_releases.sh +++ b/build_releases.sh @@ -8,10 +8,14 @@ rm -rf dist lib echo "Browser Release:" PARSE_BUILD=browser gulp compile +echo "Weapp Release:" +PARSE_BUILD=weapp gulp compile echo "Node.js Release:" PARSE_BUILD=node gulp compile echo "React Native Release:" PARSE_BUILD=react-native gulp compile echo "Bundling and minifying for CDN distribution:" gulp browserify +gulp browserify-weapp gulp minify +gulp minify-weapp diff --git a/gulpfile.js b/gulpfile.js index b76a37b93..e68c60021 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -23,6 +23,9 @@ var PRESETS = { 'browser': [["@babel/preset-env", { "targets": "> 0.25%, not dead" }], '@babel/preset-react'], + 'weapp': [["@babel/preset-env", { + "targets": "> 0.25%, not dead" + }], '@babel/preset-react'], 'node': [["@babel/preset-env", { "targets": { "node": "8" } }]], @@ -31,8 +34,10 @@ var PRESETS = { var PLUGINS = { 'browser': [transformRuntime, '@babel/plugin-transform-flow-comments', '@babel/plugin-proposal-class-properties', 'inline-package-json', ['transform-inline-environment-variables', {'exclude': ['SERVER_RENDERING']}]], + 'weapp': [transformRuntime, '@babel/plugin-transform-flow-comments', '@babel/plugin-proposal-class-properties', 'inline-package-json', + ['transform-inline-environment-variables', {'exclude': ['SERVER_RENDERING']}]], 'node': ['@babel/plugin-transform-flow-comments', 'inline-package-json', 'transform-inline-environment-variables'], - 'react-native': ['@babel/plugin-transform-flow-comments', 'inline-package-json', 'transform-inline-environment-variables'], + 'react-native': ['@babel/plugin-transform-flow-comments', 'inline-package-json', 'transform-inline-environment-variables'] }; var DEV_HEADER = ( @@ -90,6 +95,25 @@ gulp.task('browserify', function(cb) { .pipe(gulp.dest('./dist')); }); + +gulp.task('browserify-weapp', function(cb) { + var stream = browserify({ + builtins: ['_process', 'events'], + entries: 'lib/weapp/Parse.js', + standalone: 'Parse' + }) + .exclude('xmlhttprequest') + .ignore('_process') + .bundle(); + stream.on('end', () => { + cb(); + }); + return stream.pipe(source('parse.weapp.js')) + .pipe(derequire()) + .pipe(insert.prepend(DEV_HEADER)) + .pipe(gulp.dest('./dist')); +}); + gulp.task('minify', function() { return gulp.src('dist/parse.js') .pipe(uglify()) @@ -98,6 +122,14 @@ gulp.task('minify', function() { .pipe(gulp.dest('./dist')) }); +gulp.task('minify-weapp', function() { + return gulp.src('dist/parse.weapp.js') + .pipe(uglify()) + .pipe(insert.prepend(FULL_HEADER)) + .pipe(rename({ extname: '.min.js' })) + .pipe(gulp.dest('./dist')) +}); + gulp.task('watch', function() { return watch('src/*.js', { ignoreInitial: false, verbose: true }) .pipe(babel({ diff --git a/package-lock.json b/package-lock.json index e9c069c15..a67d770f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5710,8 +5710,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5734,15 +5733,13 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5758,20 +5755,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5901,8 +5895,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5916,7 +5909,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5933,7 +5925,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5941,15 +5932,13 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5970,7 +5959,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -6058,8 +6046,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -6073,7 +6060,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -6168,8 +6154,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -6211,7 +6196,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6233,7 +6217,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6281,14 +6264,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -9601,7 +9582,6 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -9611,8 +9591,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true, - "optional": true + "dev": true } } }, @@ -10545,9 +10524,9 @@ "@apollographql/graphql-playground-html": "1.6.24", "@parse/fs-files-adapter": "1.0.1", "@parse/push-adapter": "3.0.0", - "@parse/s3-files-adapter": "1.2.1", + "@parse/s3-files-adapter": "1.2.3", "@parse/simple-mailgun-adapter": "1.1.0", - "apollo-server-express": "2.6.9", + "apollo-server-express": "2.7.0", "bcrypt": "3.0.6", "bcryptjs": "2.4.3", "body-parser": "1.19.0", @@ -10558,16 +10537,17 @@ "follow-redirects": "1.7.0", "graphql": "14.4.2", "graphql-list-fields": "2.0.2", + "graphql-tools": "^4.0.5", "graphql-upload": "8.0.7", "intersect": "1.0.1", "jsonwebtoken": "8.5.1", - "lodash": "4.17.14", + "lodash": "4.17.15", "lru-cache": "5.1.1", "mime": "2.4.4", "mongodb": "3.2.7", "node-rsa": "1.0.5", - "parse": "2.4.0", - "pg-promise": "8.7.4", + "parse": "2.5.1", + "pg-promise": "8.7.5", "redis": "2.8.0", "semver": "6.2.0", "subscriptions-transport-ws": "0.9.16", @@ -10575,8 +10555,8 @@ "uuid": "3.3.2", "uws": "10.148.1", "winston": "3.2.1", - "winston-daily-rotate-file": "3.9.0", - "ws": "7.1.0" + "winston-daily-rotate-file": "3.10.0", + "ws": "7.1.1" }, "dependencies": { "apollo-cache-control": { diff --git a/src/Parse.js b/src/Parse.js index c38ef2a62..d6a7d27d6 100644 --- a/src/Parse.js +++ b/src/Parse.js @@ -267,6 +267,10 @@ if (process.env.PARSE_BUILD === 'node') { Parse.Hooks = require('./ParseHooks'); } +if (process.env.PARSE_BUILD === 'weapp') { + wx.Parse = Parse; +} + // For legacy requires, of the form `var Parse = require('parse').Parse` Parse.Parse = Parse; diff --git a/src/RESTController.js b/src/RESTController.js index 2a2ff0995..aa2fb100a 100644 --- a/src/RESTController.js +++ b/src/RESTController.js @@ -38,6 +38,58 @@ if (typeof XMLHttpRequest !== 'undefined') { if (process.env.PARSE_BUILD === 'node') { XHR = require('xmlhttprequest').XMLHttpRequest; } +if (process.env.PARSE_BUILD === 'weapp') { + class WeappXhr { + constructor() { + this.header = {}; + this.readyState = 4; + this.status = 0; + this.responseText = ""; + this.responseHeader = {}; + this.method = ""; + this.url = ""; + this.onreadystatechange = () => {} + } + + getAllResponseHeaders() { + let header = ""; + for(const key in this.responseHeader){ + header += key + ':' + this.getResponseHeader(key) + '\r\n' + } + return header; + } + + getResponseHeader(key) { + return this.responseHeader[key]; + } + + setRequestHeader(key, value) { + this.header[key] = value; + } + + open(method, url) { + this.method = method; + this.url = url; + } + + send(data) { + wx.request({ + url: this.url, + method: this.method, + data: data, + header: this.header, + complete: (res) => { + this.status = res.statusCode; + this.responseHeader = res.header; + this.responseText = JSON.stringify(res.data); + + this.onreadystatechange(); + } + }) + } + } + XHR = WeappXhr; +} let useXDomainRequest = false; if (typeof XDomainRequest !== 'undefined' && diff --git a/src/Storage.js b/src/Storage.js index 9cb121c3e..04fff8fe6 100644 --- a/src/Storage.js +++ b/src/Storage.js @@ -98,6 +98,8 @@ if (process.env.PARSE_BUILD === 'react-native') { CoreManager.setStorageController(require('./StorageController.react-native')); } else if (process.env.PARSE_BUILD === 'browser') { CoreManager.setStorageController(require('./StorageController.browser')); +} else if (process.env.PARSE_BUILD === 'weapp') { + CoreManager.setStorageController(require('./StorageController.weapp')); } else { CoreManager.setStorageController(require('./StorageController.default')); } diff --git a/src/StorageController.weapp.js b/src/StorageController.weapp.js new file mode 100644 index 000000000..75e3af5c6 --- /dev/null +++ b/src/StorageController.weapp.js @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @flow + */ +localStorage = { + getItem(path) { + return wx.getStorageSync(path); + }, + setItem(path, value) { + return wx.setStorageSync(path, value); + }, + removeItem(path) { + return wx.removeStorageSync(path); + }, + clear() { + return wx.clearStorageSync(); + } +} + +const StorageController = { + async: 0, + + getItem(path: string): ?string { + return localStorage.getItem(path); + }, + + setItem(path: string, value: string) { + try { + localStorage.setItem(path, value); + } catch (e) { + // Quota exceeded, possibly due to Safari Private Browsing mode + } + }, + + removeItem(path: string) { + localStorage.removeItem(path); + }, + + clear() { + localStorage.clear(); + } +}; + +module.exports = StorageController; diff --git a/weapp.js b/weapp.js new file mode 100644 index 000000000..bd608f79c --- /dev/null +++ b/weapp.js @@ -0,0 +1 @@ +module.exports = require('./lib/weapp/Parse.js'); From ff3e48c0b7b1c47601d0bcec81690eb461aa9cf9 Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Wed, 24 Jul 2019 08:44:34 +0800 Subject: [PATCH 2/8] fix eslint and localStorage --- .eslintrc.json | 3 +++ src/RESTController.js | 4 ++-- src/StorageController.weapp.js | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 20db5b8db..0bc5d53bd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,6 +6,9 @@ "es6": true }, "parser": "babel-eslint", + "globals": { + "wx": true + }, "plugins": [ "flowtype" ], diff --git a/src/RESTController.js b/src/RESTController.js index aa2fb100a..2d1121b9d 100644 --- a/src/RESTController.js +++ b/src/RESTController.js @@ -62,7 +62,7 @@ if (process.env.PARSE_BUILD === 'weapp') { getResponseHeader(key) { return this.responseHeader[key]; } - + setRequestHeader(key, value) { this.header[key] = value; } @@ -70,7 +70,7 @@ if (process.env.PARSE_BUILD === 'weapp') { open(method, url) { this.method = method; this.url = url; - } + } send(data) { wx.request({ diff --git a/src/StorageController.weapp.js b/src/StorageController.weapp.js index 75e3af5c6..ff5bf8fba 100644 --- a/src/StorageController.weapp.js +++ b/src/StorageController.weapp.js @@ -8,7 +8,7 @@ * * @flow */ -localStorage = { +const localStorage = { getItem(path) { return wx.getStorageSync(path); }, From 4e733fea832b6bf8bf3a3c5789cdbdaf7e4e45a5 Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Wed, 24 Jul 2019 11:55:58 +0800 Subject: [PATCH 3/8] fix regenerator-runtime https://blog.csdn.net/xubaifu1997/article/details/90605683 --- package-lock.json | 467 ++++++++++++++++++++++++++-------------------- package.json | 1 + 2 files changed, 263 insertions(+), 205 deletions(-) diff --git a/package-lock.json b/package-lock.json index a67d770f6..f060dec96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1271,6 +1271,14 @@ "requires": { "core-js": "^2.6.5", "regenerator-runtime": "^0.13.2" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + } } }, "@babel/preset-env": { @@ -1360,10 +1368,7 @@ "@babel/runtime": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", - "requires": { - "regenerator-runtime": "^0.13.2" - } + "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==" }, "@babel/template": { "version": "7.4.0", @@ -1689,15 +1694,6 @@ } } }, - "@parse/s3-files-adapter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-1.2.1.tgz", - "integrity": "sha1-2dN8zoXj1CsogqX/J4m+wbF+xnU=", - "dev": true, - "requires": { - "aws-sdk": "^2.59.0" - } - }, "@parse/simple-mailgun-adapter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@parse/simple-mailgun-adapter/-/simple-mailgun-adapter-1.1.0.tgz", @@ -2125,20 +2121,44 @@ } } }, + "apollo-cache-control": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.8.0.tgz", + "integrity": "sha512-BBnfUmSWRws5dRSDD+R56RLJCE9v6xQuob+i/1Ju9EX4LZszU5JKVmxEvnkJ1bk/BkihjoQXTnP6fJCnt6fCmA==", + "dev": true, + "requires": { + "apollo-server-env": "2.4.0", + "graphql-extensions": "0.8.0" + } + }, "apollo-datasource": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.5.0.tgz", - "integrity": "sha512-SVXxJyKlWguuDjxkY/WGlC/ykdsTmPxSF0z8FenagcQ91aPURXzXP1ZDz5PbamY+0iiCRubazkxtTQw4GWTFPg==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.6.0.tgz", + "integrity": "sha512-DOzzYWEOReYRu2vWPKEulqlTb9Xjg67sjVCzve5MXa7GUXjfr8IKioljvfoBMlqm/PpbJVk2ci4n5NIFqoYsrQ==", "dev": true, "requires": { - "apollo-server-caching": "0.4.0", + "apollo-server-caching": "0.5.0", "apollo-server-env": "2.4.0" } }, + "apollo-engine-reporting": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.4.0.tgz", + "integrity": "sha512-NMiO3h1cuEBt6QZNGHxivwuyZQnoU/2MMx0gUA8Gyy1ERBhK6P235qoMnvoi34rLmqJuyGPX6tXcab8MpMIzYQ==", + "dev": true, + "requires": { + "apollo-engine-reporting-protobuf": "0.4.0", + "apollo-graphql": "^0.3.3", + "apollo-server-env": "2.4.0", + "apollo-server-types": "0.2.0", + "async-retry": "^1.2.1", + "graphql-extensions": "0.8.0" + } + }, "apollo-engine-reporting-protobuf": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.3.1.tgz", - "integrity": "sha512-Ui3nPG6BSZF8BEqxFs6EkX6mj2OnFLMejxEHSOdM82bakyeouCGd7J0fiy8AD6liJoIyc4X7XfH4ZGGMvMh11A==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/apollo-engine-reporting-protobuf/-/apollo-engine-reporting-protobuf-0.4.0.tgz", + "integrity": "sha512-cXHZSienkis8v4RhqB3YG3DkaksqLpcxApRLTpRMs7IXNozgV7CUPYGFyFBEra1ZFgUyHXx4G9MpelV+n2cCfA==", "dev": true, "requires": { "protobufjs": "^6.8.6" @@ -2186,14 +2206,55 @@ } }, "apollo-server-caching": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.4.0.tgz", - "integrity": "sha512-GTOZdbLhrSOKYNWMYgaqX5cVNSMT0bGUTZKV8/tYlyYmsB6ey7l6iId3Q7UpHS6F6OR2lstz5XaKZ+T3fDfPzQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.5.0.tgz", + "integrity": "sha512-l7ieNCGxUaUAVAAp600HjbUJxVaxjJygtPV0tPTe1Q3HkPy6LEWoY6mNHV7T268g1hxtPTxcdRu7WLsJrg7ufw==", "dev": true, "requires": { "lru-cache": "^5.0.0" } }, + "apollo-server-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.7.0.tgz", + "integrity": "sha512-CXjXAkgcMBCJZpsZgfAY5W7f5thdxUhn75UgzeH28RTUZ2aKi/LjoCixPWRSF1lU4vuEWneAnM8Vg/KCD+29lQ==", + "dev": true, + "requires": { + "@apollographql/apollo-tools": "^0.3.6", + "@apollographql/graphql-playground-html": "1.6.24", + "@types/ws": "^6.0.0", + "apollo-cache-control": "0.8.0", + "apollo-datasource": "0.6.0", + "apollo-engine-reporting": "1.4.0", + "apollo-engine-reporting-protobuf": "0.4.0", + "apollo-server-caching": "0.5.0", + "apollo-server-env": "2.4.0", + "apollo-server-errors": "2.3.1", + "apollo-server-plugin-base": "0.6.0", + "apollo-server-types": "0.2.0", + "apollo-tracing": "0.8.0", + "fast-json-stable-stringify": "^2.0.0", + "graphql-extensions": "0.8.0", + "graphql-subscriptions": "^1.0.0", + "graphql-tag": "^2.9.2", + "graphql-tools": "^4.0.0", + "graphql-upload": "^8.0.2", + "sha.js": "^2.4.11", + "subscriptions-transport-ws": "^0.9.11", + "ws": "^6.0.0" + }, + "dependencies": { + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "apollo-server-env": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.4.0.tgz", @@ -2204,6 +2265,63 @@ "util.promisify": "^1.0.0" } }, + "apollo-server-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.1.tgz", + "integrity": "sha512-errZvnh0vUQChecT7M4A/h94dnBSRL213dNxpM5ueMypaLYgnp4hiCTWIEaooo9E4yMGd1qA6WaNbLDG2+bjcg==", + "dev": true + }, + "apollo-server-express": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.7.0.tgz", + "integrity": "sha512-TIOaLyuxD8xIECXjbPfS9HUWgHCKsG3rR4WuTpTreVEB08EsGeg+VcNGn0hmUnch18fPXTciBHWCv/fFV/YhMg==", + "dev": true, + "requires": { + "@apollographql/graphql-playground-html": "1.6.24", + "@types/accepts": "^1.3.5", + "@types/body-parser": "1.17.0", + "@types/cors": "^2.8.4", + "@types/express": "4.17.0", + "accepts": "^1.3.5", + "apollo-server-core": "2.7.0", + "apollo-server-types": "0.2.0", + "body-parser": "^1.18.3", + "cors": "^2.8.4", + "graphql-subscriptions": "^1.0.0", + "graphql-tools": "^4.0.0", + "type-is": "^1.6.16" + } + }, + "apollo-server-plugin-base": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.6.0.tgz", + "integrity": "sha512-BjfyWpHyKwHOe819gk3wEFwbnVp9Xvos03lkkYTTcXS/8G7xO78aUcE65mmyAC56/ZQ0aodNFkFrhwNtWBQWUQ==", + "dev": true, + "requires": { + "apollo-server-types": "0.2.0" + } + }, + "apollo-server-types": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.2.0.tgz", + "integrity": "sha512-5dgiyXsM90vnfmdXO1ixHvsLn0d9NP4tWufmr3ZmjKv00r4JAQNUaUdgOSGbRIKoHELQGwxUuTySTZ/tYfGaNQ==", + "dev": true, + "requires": { + "apollo-engine-reporting-protobuf": "0.4.0", + "apollo-server-caching": "0.5.0", + "apollo-server-env": "2.4.0" + } + }, + "apollo-tracing": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.8.0.tgz", + "integrity": "sha512-cNOtOlyZ56iJRsCjnxjM1V0SnQ2ZZttuyoeOejdat6llPfk5bfYTVOKMjdbSfDvU33LS9g9sqNJCT0MwrEPFKQ==", + "dev": true, + "requires": { + "apollo-server-env": "2.4.0", + "graphql-extensions": "0.8.0" + } + }, "apollo-utilities": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", @@ -5710,7 +5828,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5733,13 +5852,15 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5755,17 +5876,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -5895,7 +6019,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -5909,6 +6034,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5925,6 +6051,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5932,13 +6059,15 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5959,6 +6088,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6046,7 +6176,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6060,6 +6191,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6154,7 +6286,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6196,6 +6329,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6217,6 +6351,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6264,12 +6399,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -6600,6 +6737,17 @@ "iterall": "^1.2.2" } }, + "graphql-extensions": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.8.0.tgz", + "integrity": "sha512-zV9RefkusIXqi9ZJtl7IJ5ecjDKdb7PLAb5E3CmxX3OK1GwNCIubp0vE7Fp4fXlCUKgTB1Woubs0zj71JT8o0A==", + "dev": true, + "requires": { + "@apollographql/apollo-tools": "^0.3.6", + "apollo-server-env": "2.4.0", + "apollo-server-types": "0.2.0" + } + }, "graphql-list-fields": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/graphql-list-fields/-/graphql-list-fields-2.0.2.tgz", @@ -9582,6 +9730,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -9591,7 +9740,8 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true + "dev": true, + "optional": true } } }, @@ -10408,38 +10558,6 @@ "path-platform": "~0.11.15" } }, - "parse": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/parse/-/parse-2.4.0.tgz", - "integrity": "sha512-H6PDiML1CFnswInFL9dAszPaHkXH9eEzH1sGKUs/sf0R9h8eZQjYO8QoO/xObZJe3gHJMHx4StGE/zs4G3NLDw==", - "dev": true, - "requires": { - "@babel/runtime": "7.4.3", - "uuid": "3.3.2", - "ws": "6.2.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, "parse-asn1": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", @@ -10549,7 +10667,7 @@ "parse": "2.5.1", "pg-promise": "8.7.5", "redis": "2.8.0", - "semver": "6.2.0", + "semver": "6.3.0", "subscriptions-transport-ws": "0.9.16", "tv4": "1.3.0", "uuid": "3.3.2", @@ -10559,150 +10677,89 @@ "ws": "7.1.1" }, "dependencies": { - "apollo-cache-control": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.7.5.tgz", - "integrity": "sha512-zCPwHjbo/VlmXl0sclZfBq/MlVVeGUAg02Q259OIXSgHBvn9BbExyz+EkO/DJvZfGMquxqS1X1BFO3VKuLUTdw==", - "dev": true, - "requires": { - "apollo-server-env": "2.4.0", - "graphql-extensions": "0.7.7" - } - }, - "apollo-engine-reporting": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/apollo-engine-reporting/-/apollo-engine-reporting-1.3.6.tgz", - "integrity": "sha512-oCoFAUBGveg1i1Sao/2gNsf1kirJBT6vw6Zan9BCNUkyh68ewDts+xRg32VnD9lDhaHpXVJ3tVtuaV44HmdSEw==", + "@babel/runtime": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.4.tgz", + "integrity": "sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q==", "dev": true, "requires": { - "apollo-engine-reporting-protobuf": "0.3.1", - "apollo-graphql": "^0.3.3", - "apollo-server-core": "2.6.9", - "apollo-server-env": "2.4.0", - "async-retry": "^1.2.1", - "graphql-extensions": "0.7.7" - } - }, - "apollo-server-core": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.6.9.tgz", - "integrity": "sha512-r2/Kjm1UmxoTViUt5EcExWXkWl0riXsuGyS1q5LpHKKnA+6b+t4LQKECkRU4EWNpuuzJQn7aF7MmMdvURxoEig==", - "dev": true, - "requires": { - "@apollographql/apollo-tools": "^0.3.6", - "@apollographql/graphql-playground-html": "1.6.24", - "@types/ws": "^6.0.0", - "apollo-cache-control": "0.7.5", - "apollo-datasource": "0.5.0", - "apollo-engine-reporting": "1.3.6", - "apollo-server-caching": "0.4.0", - "apollo-server-env": "2.4.0", - "apollo-server-errors": "2.3.1", - "apollo-server-plugin-base": "0.5.8", - "apollo-tracing": "0.7.4", - "fast-json-stable-stringify": "^2.0.0", - "graphql-extensions": "0.7.7", - "graphql-subscriptions": "^1.0.0", - "graphql-tag": "^2.9.2", - "graphql-tools": "^4.0.0", - "graphql-upload": "^8.0.2", - "sha.js": "^2.4.11", - "subscriptions-transport-ws": "^0.9.11", - "ws": "^6.0.0" - }, - "dependencies": { - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } + "regenerator-runtime": "^0.13.2" } }, - "apollo-server-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.3.1.tgz", - "integrity": "sha512-errZvnh0vUQChecT7M4A/h94dnBSRL213dNxpM5ueMypaLYgnp4hiCTWIEaooo9E4yMGd1qA6WaNbLDG2+bjcg==", - "dev": true - }, - "apollo-server-express": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.6.9.tgz", - "integrity": "sha512-iTkdIdX7m9EAlmL/ZPkKR+x/xuFk1HYZWuJIJG57hHUhcOxj50u7F1E5+5fDwl5RFIdepQ61azF31hhNZuNi4g==", + "@parse/s3-files-adapter": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@parse/s3-files-adapter/-/s3-files-adapter-1.2.3.tgz", + "integrity": "sha512-fmCf2X1akoCSpY3x4TOC7wj1jWI1qM0u6thUwwOXyREebw+YvEclufXGorpbIEhLeZj+foyg2s7nxDaxKqmAQg==", "dev": true, "requires": { - "@apollographql/graphql-playground-html": "1.6.24", - "@types/accepts": "^1.3.5", - "@types/body-parser": "1.17.0", - "@types/cors": "^2.8.4", - "@types/express": "4.17.0", - "accepts": "^1.3.5", - "apollo-server-core": "2.6.9", - "body-parser": "^1.18.3", - "cors": "^2.8.4", - "graphql-subscriptions": "^1.0.0", - "graphql-tools": "^4.0.0", - "type-is": "^1.6.16" + "aws-sdk": "^2.59.0" } }, - "apollo-server-plugin-base": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.5.8.tgz", - "integrity": "sha512-ICbaXr0ycQZL5llbtZhg8zyHbxuZ4khdAJsJgiZaUXXP6+F47XfDQ5uwnl/4Sq9fvkpwS0ctvfZ1D+Ks4NvUzA==", + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "apollo-tracing": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.7.4.tgz", - "integrity": "sha512-vA0FJCBkFpwdWyVF5UtCqN+enShejyiqSGqq8NxXHU1+GEYTngWa56x9OGsyhX+z4aoDIa3HPKPnP3pjzA0qpg==", - "dev": true, - "requires": { - "apollo-server-env": "2.4.0", - "graphql-extensions": "0.7.7" - } - }, - "graphql-extensions": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.7.7.tgz", - "integrity": "sha512-xiTbVGPUpLbF86Bc+zxI/v/axRkwZx3s+y2/kUb2c2MxNZeNhMZEw1dSutuhY2f2JkRkYFJii0ucjIVqPAQ/Lg==", - "dev": true, - "requires": { - "@apollographql/apollo-tools": "^0.3.6", - "apollo-server-env": "2.4.0" - } - }, "mime": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, - "pg-promise": { - "version": "8.7.4", - "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-8.7.4.tgz", - "integrity": "sha512-LjxIajzq4PYonIfJnuQNcV2is8RM/l0VvYe927yXR0h92oSmr4gXiV1kc+eG3YILPRSw4BrWEBdW+UhTdE+qDw==", + "parse": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/parse/-/parse-2.5.1.tgz", + "integrity": "sha512-B2Ouq5RY/yV5CcVsBzdKSN94Ltw/W4MbB/5+JJH2YZ+8+Ur+sF2WvfEt4hTSMh/+nLZhMaGZKr+IFrIJogDAjA==", "dev": true, "requires": { - "assert-options": "0.1.3", - "manakin": "0.5.2", - "pg": "7.11.0", - "pg-minify": "1.4.1", - "spex": "2.2.0" + "@babel/runtime": "7.5.4", + "uuid": "3.3.2", + "ws": "7.1.0", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "ws": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz", + "integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==", + "dev": true, + "requires": { + "async-limiter": "^1.0.0" + } + } } }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, "semver": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", "dev": true }, + "winston-daily-rotate-file": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz", + "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==", + "dev": true, + "requires": { + "file-stream-rotator": "^0.4.1", + "object-hash": "^1.3.0", + "semver": "^6.2.0", + "triple-beam": "^1.3.0", + "winston-compat": "^0.1.4", + "winston-transport": "^4.2.0" + } + }, "ws": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz", - "integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.1.tgz", + "integrity": "sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A==", "dev": true, "requires": { "async-limiter": "^1.0.0" @@ -10883,6 +10940,19 @@ "integrity": "sha512-hod2zYQxM8Gt482q+qONGTYcg/qVcV32VHVPtktbBJs0us3Dj7xibISw0BAAXVMCzt8A/jhfJvpZaxUlqtqs0g==", "dev": true }, + "pg-promise": { + "version": "8.7.5", + "resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-8.7.5.tgz", + "integrity": "sha512-r/OmS1b1i0nA0KHqlbcAoMLoNo3EGUdcZxaseyXnHrzepcS8ciK516Lw6/lIb6AeWI85ZOBSNdiPlw22xoFx3A==", + "dev": true, + "requires": { + "assert-options": "0.1.3", + "manakin": "0.5.2", + "pg": "7.11.0", + "pg-minify": "1.4.1", + "spex": "2.2.0" + } + }, "pg-types": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.0.1.tgz", @@ -11098,9 +11168,9 @@ }, "dependencies": { "@types/node": { - "version": "10.14.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.12.tgz", - "integrity": "sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg==", + "version": "10.14.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz", + "integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ==", "dev": true } } @@ -11429,9 +11499,10 @@ } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.1.tgz", + "integrity": "sha512-5KzMIyPLvfdPmvsdlYsHqITrDfK9k7bmvf97HvHSN4810i254ponbxCQ1NukpRWlu6en2MBWzAlhDExEKISwAA==", + "dev": true }, "regenerator-transform": { "version": "0.14.0", @@ -13664,20 +13735,6 @@ } } }, - "winston-daily-rotate-file": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.9.0.tgz", - "integrity": "sha512-KicvoaLQapqjSDSCIUKik0dDb90vFkqx1/udUiAt6iOqAtBl2qBCrpSDNy3xp7WnT6xHCKAWEEp2XILtiN+zpQ==", - "dev": true, - "requires": { - "file-stream-rotator": "^0.4.1", - "object-hash": "^1.3.0", - "semver": "^5.6.0", - "triple-beam": "^1.3.0", - "winston-compat": "^0.1.4", - "winston-transport": "^4.2.0" - } - }, "winston-transport": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", diff --git a/package.json b/package.json index 3493ac60b..59d2107a5 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "jsdoc": "3.6.3", "jsdoc-babel": "0.5.0", "parse-server": "github:parse-community/parse-server#master", + "regenerator-runtime": "0.13.1", "vinyl-source-stream": "2.0.0" }, "scripts": { From 1b6306ff9de4db2e173a23d2588c76bb6ef815fa Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Wed, 24 Jul 2019 22:12:51 +0800 Subject: [PATCH 4/8] support file downloadAjax --- src/ParseFile.js | 3 +++ src/RESTController.js | 51 +------------------------------------- src/Xhr.weapp.js | 57 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 50 deletions(-) create mode 100644 src/Xhr.weapp.js diff --git a/src/ParseFile.js b/src/ParseFile.js index 87c867168..97d392926 100644 --- a/src/ParseFile.js +++ b/src/ParseFile.js @@ -16,6 +16,9 @@ let XHR = null; if (typeof XMLHttpRequest !== 'undefined') { XHR = XMLHttpRequest; } +if (process.env.PARSE_BUILD === 'weapp') { + XHR = require('./Xhr.weapp'); +} type Base64 = { base64: string }; type Uri = { uri: string }; diff --git a/src/RESTController.js b/src/RESTController.js index 2d1121b9d..01af56ef9 100644 --- a/src/RESTController.js +++ b/src/RESTController.js @@ -39,56 +39,7 @@ if (process.env.PARSE_BUILD === 'node') { XHR = require('xmlhttprequest').XMLHttpRequest; } if (process.env.PARSE_BUILD === 'weapp') { - class WeappXhr { - constructor() { - this.header = {}; - this.readyState = 4; - this.status = 0; - this.responseText = ""; - this.responseHeader = {}; - this.method = ""; - this.url = ""; - this.onreadystatechange = () => {} - } - - getAllResponseHeaders() { - let header = ""; - for(const key in this.responseHeader){ - header += key + ':' + this.getResponseHeader(key) + '\r\n' - } - return header; - } - - getResponseHeader(key) { - return this.responseHeader[key]; - } - - setRequestHeader(key, value) { - this.header[key] = value; - } - - open(method, url) { - this.method = method; - this.url = url; - } - - send(data) { - wx.request({ - url: this.url, - method: this.method, - data: data, - header: this.header, - complete: (res) => { - this.status = res.statusCode; - this.responseHeader = res.header; - this.responseText = JSON.stringify(res.data); - - this.onreadystatechange(); - } - }) - } - } - XHR = WeappXhr; + XHR = require('./Xhr.weapp'); } let useXDomainRequest = false; diff --git a/src/Xhr.weapp.js b/src/Xhr.weapp.js new file mode 100644 index 000000000..b742a969d --- /dev/null +++ b/src/Xhr.weapp.js @@ -0,0 +1,57 @@ +module.exports = class XhrWeapp { + constructor() { + this.header = {}; + this.readyState = 4; + this.status = 0; + this.response = ''; + this.responseType = ''; + this.responseText = ''; + this.responseHeader = {}; + this.method = ''; + this.url = ''; + this.onerror = () => {} + this.onreadystatechange = () => {} + } + + getAllResponseHeaders() { + let header = ''; + for(const key in this.responseHeader){ + header += key + ':' + this.getResponseHeader(key) + '\r\n' + } + return header; + } + + getResponseHeader(key) { + return this.responseHeader[key]; + } + + setRequestHeader(key, value) { + this.header[key] = value; + } + + open(method, url) { + this.method = method; + this.url = url; + } + + send(data) { + wx.request({ + url: this.url, + method: this.method, + data: data, + header: this.header, + responseType: this.responseType, + success: (res) => { + this.status = res.statusCode; + this.response = res.data; + this.responseHeader = res.header; + this.responseText = JSON.stringify(res.data); + + this.onreadystatechange(); + }, + fail: (err) => { + this.onerror(err); + } + }) + } +}; From 99092f5da689bcfbf6103fc80aef809c5cdd3c65 Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Thu, 25 Jul 2019 19:11:45 +0800 Subject: [PATCH 5/8] support liveQuery --- src/LiveQueryClient.js | 2 ++ src/Socket.weapp.js | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/Socket.weapp.js diff --git a/src/LiveQueryClient.js b/src/LiveQueryClient.js index 7aa39bc21..5f6610169 100644 --- a/src/LiveQueryClient.js +++ b/src/LiveQueryClient.js @@ -321,6 +321,8 @@ class LiveQueryClient extends EventEmitter { return require('ws'); } else if (process.env.PARSE_BUILD === 'browser') { return typeof WebSocket === 'function' || typeof WebSocket === 'object' ? WebSocket : null; + } else if (process.env.PARSE_BUILD === 'weapp') { + return require('./Socket.weapp'); } else if (process.env.PARSE_BUILD === 'react-native') { return WebSocket; } diff --git a/src/Socket.weapp.js b/src/Socket.weapp.js new file mode 100644 index 000000000..010be5217 --- /dev/null +++ b/src/Socket.weapp.js @@ -0,0 +1,34 @@ +module.exports = class SocketWeapp { + constructor(serverURL) { + this.onopen = () => {} + this.onmessage = () => {} + this.onclose = () => {} + this.onerror = () => {} + + wx.connectSocket({ + url: serverURL + }) + + wx.onSocketOpen(() => { + this.onopen(); + }) + + wx.onSocketMessage((msg) => { + this.onmessage(msg); + }); + + wx.onSocketClose(() => { + this.onclose(); + }) + + wx.onSocketError((error) => { + this.onerror(error); + }) + } + + send(msg) { + wx.sendSocketMessage({ + data: msg + }) + } +} From 1850b3928280b3bd5e6bc6d568ec4a5bde8fd95e Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Thu, 25 Jul 2019 14:36:20 -0500 Subject: [PATCH 6/8] Add weapp.js to distribution --- README.md | 6 ++++++ package.json | 1 + src/StorageController.weapp.js | 25 +++++-------------------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 3d174a3dc..70e51673a 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,12 @@ const AsyncStorage = require('react-native').AsyncStorage; Parse.setAsyncStorage(AsyncStorage); ``` +For WeChat applications, include `'parse/weapp'`: +```js +// In a WeCat application +const Parse = require('parse/weapp'); +``` + For TypeScript applications, install `'@types/parse'`: ``` $ npm install @types/parse diff --git a/package.json b/package.json index 59d2107a5..7f98be078 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "index.js", "node.js", "react-native.js", + "weapp.js", "dist/", "lib/", "LICENSE", diff --git a/src/StorageController.weapp.js b/src/StorageController.weapp.js index ff5bf8fba..da9358dfd 100644 --- a/src/StorageController.weapp.js +++ b/src/StorageController.weapp.js @@ -8,42 +8,27 @@ * * @flow */ -const localStorage = { - getItem(path) { - return wx.getStorageSync(path); - }, - setItem(path, value) { - return wx.setStorageSync(path, value); - }, - removeItem(path) { - return wx.removeStorageSync(path); - }, - clear() { - return wx.clearStorageSync(); - } -} - const StorageController = { async: 0, getItem(path: string): ?string { - return localStorage.getItem(path); + return wx.getStorageSync(path); }, setItem(path: string, value: string) { try { - localStorage.setItem(path, value); + wx.setStorageSync(path, value); } catch (e) { - // Quota exceeded, possibly due to Safari Private Browsing mode + // Quota exceeded } }, removeItem(path: string) { - localStorage.removeItem(path); + wx.removeStorageSync(path); }, clear() { - localStorage.clear(); + wx.clearStorageSync(); } }; From 919d20caa400d14933237902f382ffcf4c486bde Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Fri, 26 Jul 2019 11:08:26 +0800 Subject: [PATCH 7/8] support LocalDatastore --- src/LocalDatastore.js | 2 + src/LocalDatastoreController.weapp.js | 73 +++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 src/LocalDatastoreController.weapp.js diff --git a/src/LocalDatastore.js b/src/LocalDatastore.js index 1f273a5a8..7b1c4a8f9 100644 --- a/src/LocalDatastore.js +++ b/src/LocalDatastore.js @@ -408,6 +408,8 @@ if (process.env.PARSE_BUILD === 'react-native') { CoreManager.setLocalDatastoreController(require('./LocalDatastoreController.react-native')); } else if (process.env.PARSE_BUILD === 'browser') { CoreManager.setLocalDatastoreController(require('./LocalDatastoreController.browser')); +} else if (process.env.PARSE_BUILD === 'weapp') { + CoreManager.setLocalDatastoreController(require('./LocalDatastoreController.weapp')); } else { CoreManager.setLocalDatastoreController(require('./LocalDatastoreController.default')); } diff --git a/src/LocalDatastoreController.weapp.js b/src/LocalDatastoreController.weapp.js new file mode 100644 index 000000000..4fe1d40a7 --- /dev/null +++ b/src/LocalDatastoreController.weapp.js @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2015-present, Parse, LLC. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @flow + */ +import { isLocalDatastoreKey } from './LocalDatastoreUtils'; + +const LocalDatastoreController = { + fromPinWithName(name: string): Array { + const values = wx.getStorageSync(name); + if (!values) { + return []; + } + return values; + }, + + pinWithName(name: string, value: any) { + try { + wx.setStorageSync(name, value); + } catch (e) { + // Quota exceeded + } + }, + + unPinWithName(name: string) { + wx.removeStorageSync(name); + }, + + getAllContents(): Object { + const res = wx.getStorageInfoSync(); + const keys = res.keys; + + const LDS = {}; + for(const key of keys){ + if (isLocalDatastoreKey(key)) { + LDS[key] = wx.getStorageSync(key); + } + } + return LDS; + }, + + getRawStorage(): Object { + const res = wx.getStorageInfoSync(); + const keys = res.keys; + + const storage = {}; + for(const key of keys){ + storage[key] = wx.getStorageSync(key); + } + return storage; + }, + + clear(): Promise { + const res = wx.getStorageInfoSync(); + const keys = res.keys; + + const toRemove = []; + for(const key of keys){ + if (isLocalDatastoreKey(key)) { + toRemove.push(key); + } + } + const promises = toRemove.map(this.unPinWithName); + return Promise.all(promises); + } +}; + +module.exports = LocalDatastoreController; From 7019142c99164020c02850607c21b2434ef9e75b Mon Sep 17 00:00:00 2001 From: heqing <786699892@qq.com> Date: Fri, 26 Jul 2019 14:27:07 +0800 Subject: [PATCH 8/8] Update readme and remove wx.Parse --- README.md | 5 +++-- src/Parse.js | 4 ---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 70e51673a..80af1f590 100644 --- a/README.md +++ b/README.md @@ -45,11 +45,12 @@ const AsyncStorage = require('react-native').AsyncStorage; Parse.setAsyncStorage(AsyncStorage); ``` -For WeChat applications, include `'parse/weapp'`: +For WeChat miniprogram, include `'parse/weapp'`: ```js -// In a WeCat application +// In a WeChat miniprogram const Parse = require('parse/weapp'); ``` +If you want to use a pre-compiled file, you can fetch it from [unpkg](https://unpkg.com). The development version is available at [https://unpkg.com/parse/dist/parse.weapp.js](https://unpkg.com/parse/dist/parse.weapp.js), and the minified production version is at [https://unpkg.com/parse/dist/parse.weapp.min.js](https://unpkg.com/parse/dist/parse.weapp.min.js). For TypeScript applications, install `'@types/parse'`: ``` diff --git a/src/Parse.js b/src/Parse.js index d6a7d27d6..c38ef2a62 100644 --- a/src/Parse.js +++ b/src/Parse.js @@ -267,10 +267,6 @@ if (process.env.PARSE_BUILD === 'node') { Parse.Hooks = require('./ParseHooks'); } -if (process.env.PARSE_BUILD === 'weapp') { - wx.Parse = Parse; -} - // For legacy requires, of the form `var Parse = require('parse').Parse` Parse.Parse = Parse;