diff --git a/.gitignore b/.gitignore index 0286574..9431136 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ plugins/ plugins/android.json plugins/ios.json $RECYCLE.BIN/ - +package-lock.json .DS_Store Thumbs.db UserInterfaceState.xcuserstate diff --git a/config.xml b/config.xml index 10d3978..cf8c14f 100644 --- a/config.xml +++ b/config.xml @@ -103,5 +103,4 @@ </plugin> <plugin name="cordova-plugin-nativegeocoder" spec="3.2.2" /> <plugin name="cordova-plugin-statusbar" spec="^2.4.2" /> - <engine name="android" spec="7.1.4" /> </widget> diff --git a/package-lock.json b/package-lock.json index bf2bf6c..245cf23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -604,7 +604,8 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", @@ -629,6 +630,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -808,7 +810,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -914,7 +917,8 @@ "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -1043,6 +1047,11 @@ "tslib": "^1.9.0" } }, + "@angular/fire": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@angular/fire/-/fire-5.2.1.tgz", + "integrity": "sha512-pS4zWhLLANzMbYVIKNtebDQKhm9+KANUDvDV6DwKP24XHzkZdvazKe1HC6uXWlf7QmDxSPFleCSBkn0tnQQzdQ==" + }, "@angular/forms": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.1.3.tgz", @@ -1241,6 +1250,211 @@ } } }, + "@firebase/app": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.4.14.tgz", + "integrity": "sha512-2awiJkYz/SMOAEGg5Qvq/596RywoefRckhjUS42kZC7C1HZ06EcQHr26ejAMFk9qeXWYLs4eumSw/V4SDYR3Kw==", + "requires": { + "@firebase/app-types": "0.4.3", + "@firebase/logger": "0.1.22", + "@firebase/util": "0.2.25", + "dom-storage": "2.1.0", + "tslib": "1.10.0", + "xmlhttprequest": "1.8.0" + } + }, + "@firebase/app-types": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.4.3.tgz", + "integrity": "sha512-VU5c+ZjejvefLVH4cjiX3Hy1w9HYMv7TtZ1tF9ZmOqT4DSIU1a3VISWoo8///cGGffr5IirMO+Q/WZLI4p8VcA==" + }, + "@firebase/auth": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.11.8.tgz", + "integrity": "sha512-aMSWaOCQmQtLKb1j96O7tErRx+kgq2OV3tMV/sKLkXp1J7SP03ejQfi+wOGDYnTWD6mNv+7b8ra1po+IHkydtg==", + "requires": { + "@firebase/auth-types": "0.7.2" + } + }, + "@firebase/auth-types": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.7.2.tgz", + "integrity": "sha512-xm3evp6671LoI+6M8Om3OhikabLf88Ivz1e7aR8uZjVBYptEYbF3seDIyHn/3wWdVYbp20WK4aWixKlRnHl+6Q==" + }, + "@firebase/database": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.0.tgz", + "integrity": "sha512-7XLy33bdVRpc+Z46SAk2XzbNuGD/jgOilYRuY+HlPt5qbhzhWHe4lnBLS6toMU299Vcvk6vLRup73qLui8FQpQ==", + "requires": { + "@firebase/database-types": "0.4.2", + "@firebase/logger": "0.1.22", + "@firebase/util": "0.2.25", + "faye-websocket": "0.11.3", + "tslib": "1.10.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "@firebase/database-types": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.2.tgz", + "integrity": "sha512-rBF/Sp4S4zzVg+a6h0iEiXR2GdNRrvx2BR6IcvGHnSPF7XVpj9UuUWtZMJyO+vWP3zlIGDvlNRJ4qF01Y6KxGg==" + }, + "@firebase/firestore": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.4.10.tgz", + "integrity": "sha512-TyPwuWdY64G0cWm4H/7x6XJESHINIQIOK0gmjw1BYA+kPudzNaoyeJ6nxZRzZ7lcNol78FLCU7eb/ChDKVAo9g==", + "requires": { + "@firebase/firestore-types": "1.4.4", + "@firebase/logger": "0.1.22", + "@firebase/util": "0.2.25", + "@firebase/webchannel-wrapper": "0.2.24", + "@grpc/proto-loader": "^0.5.0", + "grpc": "1.22.2", + "tslib": "1.10.0" + } + }, + "@firebase/firestore-types": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.4.4.tgz", + "integrity": "sha512-kFpmzkUKfzrXkcMad+TQlMs55dWNY0q1UxGICW82EneX3Yg6HN3Nx36kYfqH+SLBFUN1ZTikN07alMp0MA9p9g==" + }, + "@firebase/functions": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.15.tgz", + "integrity": "sha512-mAOOHKaHqGRP2+5jlKesGUPQFiiy/sgjW5iURvzv0OJUdhERGlfCj9JM5w/1zosXG0oAiiu9Q+K/84dXyeaw4A==", + "requires": { + "@firebase/functions-types": "0.3.8", + "@firebase/messaging-types": "0.3.2", + "isomorphic-fetch": "2.2.1", + "tslib": "1.10.0" + } + }, + "@firebase/functions-types": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.8.tgz", + "integrity": "sha512-9hajHxA4UWVCGFmoL8PBYHpamE3JTNjObieMmnvZw3cMRTP2EwipMpzZi+GPbMlA/9swF9yHCY/XFAEkwbvdgQ==" + }, + "@firebase/installations": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.2.4.tgz", + "integrity": "sha512-lJlqVa7r/HuI9/d+oSr0CxyN/A1nMMgqDJJr0geDLqfDokrmFhkRxbtb28saGaGnfLzc1KhvIB/TdhzDJ/fDJA==", + "requires": { + "@firebase/installations-types": "0.1.2", + "@firebase/util": "0.2.25", + "idb": "3.0.2", + "tslib": "1.10.0" + } + }, + "@firebase/installations-types": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.1.2.tgz", + "integrity": "sha512-fQaWIW8hyX1XUN7+FCSPjvM1agFjGidVuF4Sxi7aFwfyh5t+4fD2VpM4wCQbWmodnx4fZLvsuQd9mkxxU+lGYQ==" + }, + "@firebase/logger": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.22.tgz", + "integrity": "sha512-os1vG5FohEF9gl27duZeTtEphOP7oHQ+YjnT+sT2dGprkTIAyaEkzH6G8AgLPUqmASSsoa6BqY5kFXHQi9+xGw==" + }, + "@firebase/messaging": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.4.8.tgz", + "integrity": "sha512-+NPRHQt4v2V07vmw98/ybOTwIspA3EaRc5Ni6D05d7N0U6RQaiqJae6T3VBMvQovXWzLRqA244KO1Z9OVTQdKg==", + "requires": { + "@firebase/messaging-types": "0.3.2", + "@firebase/util": "0.2.25", + "tslib": "1.10.0" + } + }, + "@firebase/messaging-types": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.3.2.tgz", + "integrity": "sha512-2qa2qNKqpalmtwaUV3+wQqfCm5myP/dViIBv+pXF8HinemIfO1IPQtr9pCNfsSYyus78qEhtfldnPWXxUH5v0w==" + }, + "@firebase/performance": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.15.tgz", + "integrity": "sha512-I0DYGx59n7r+U0xRi3ee3pidjQF/lp865pHdd+x+lxSLHE3u0XxS3tiSr2xePqm4C7v+syW+wEQRowd9z7UzoA==", + "requires": { + "@firebase/installations": "0.2.4", + "@firebase/logger": "0.1.22", + "@firebase/performance-types": "0.0.3", + "@firebase/util": "0.2.25", + "tslib": "1.10.0" + } + }, + "@firebase/performance-types": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.3.tgz", + "integrity": "sha512-RuC63nYJPJU65AsrNMc3fTRcRgHiyNcQLh9ufeKUT1mEsFgpxr167gMb+tpzNU4jsbvM6+c6nQAFdHpqcGkRlQ==" + }, + "@firebase/polyfill": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.19.tgz", + "integrity": "sha512-70gNPxxHCaSKcNw1g9XfBe15LWrvzvgzUGBVgAdv7zkpgtHMu/uEuklb+A0H1GJtNn6ijyHEAJGXR3KHJ92HEg==", + "requires": { + "core-js": "3.1.4", + "promise-polyfill": "8.1.3", + "whatwg-fetch": "2.0.4" + }, + "dependencies": { + "core-js": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", + "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==" + }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + } + } + }, + "@firebase/storage": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.9.tgz", + "integrity": "sha512-Fxku8HVilac2zx1hnxshcnh4WhbY5DWT10dQwrFYNUFW1RuRfTB0zm3SNOVy4NAt7xpVIjqSjFs8mWDXGe7qaQ==", + "requires": { + "@firebase/storage-types": "0.3.3", + "@firebase/util": "0.2.25", + "tslib": "1.10.0" + } + }, + "@firebase/storage-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.3.tgz", + "integrity": "sha512-fUp4kpbxwDiWs/aIBJqBvXgFHZvgoND2JA0gJYSEsXtWtVwfgzY/710plErgZDeQKopX5eOR1sHskZkQUy0U6w==" + }, + "@firebase/util": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.25.tgz", + "integrity": "sha512-J/JgYhvFLCpejzfzjzNDZGFZD3kNtTlMu+2EjiQ3tCII6w0N/uEza5GtFiYTKCjGBa51Lmi2j/OPLz+yhlQCWg==", + "requires": { + "tslib": "1.10.0" + } + }, + "@firebase/webchannel-wrapper": { + "version": "0.2.24", + "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.24.tgz", + "integrity": "sha512-/wt/p0GrYp1cKTGMx1Ak8LpMH6PAJI7rMTYeROXi6+bZ30mhdIjpmLs11Bx26fzcZEH0jWlHXLfVdVDS5WXi2Q==" + }, + "@grpc/proto-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.1.tgz", + "integrity": "sha512-3y0FhacYAwWvyXshH18eDkUI40wT/uGio7MAegzY8lO5+wVsc19+1A7T0pPptae4kl7bdITL+0cHpnAPmryBjQ==", + "requires": { + "lodash.camelcase": "^4.3.0", + "protobufjs": "^6.8.6" + } + }, "@ionic-native/core": { "version": "5.11.0", "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.11.0.tgz", @@ -1319,6 +1533,16 @@ "tslib": "^1.10.0" } }, + "@ionic/storage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.2.0.tgz", + "integrity": "sha512-2pszrzmI+fAar2Rx0WmJDVpc15D1k5tvLkB49NLYWJ2pOMaO/3/vp7mg/mEbg3rdsPE9FRbYI6vdKjQ2pP1EWA==", + "requires": { + "localforage": "1.7.1", + "localforage-cordovasqlitedriver": "1.7.0", + "tslib": "^1.7.1" + } + }, "@ngtools/webpack": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.1.3.tgz", @@ -1343,6 +1567,60 @@ } } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=" + }, "@schematics/angular": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.1.3.tgz", @@ -1417,6 +1695,11 @@ "@types/jasmine": "*" } }, + "@types/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", + "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -1670,6 +1953,11 @@ "through": ">=2.2.7 <3" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1757,6 +2045,26 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "android-versions": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.4.0.tgz", + "integrity": "sha512-GnomfYsBq+nZh3c3UH/4r9Jt6FuTxdhUJbeHIdYOH5xBhQ8I0ZzC2/RM5IFFIjrzuNWSHb8JWP1lPK0/a26jrg==", + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, "ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -1778,8 +2086,7 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "3.2.1", @@ -1903,6 +2210,15 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, + "ascli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", + "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", + "requires": { + "colour": "~0.7.1", + "optjs": "~3.2.2" + } + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -2175,8 +2491,7 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base": { "version": "0.11.2", @@ -2242,8 +2557,7 @@ "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "base64id": { "version": "1.0.0", @@ -2275,6 +2589,11 @@ "callsite": "1.0.0" } }, + "big-integer": { + "version": "1.6.44", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz", + "integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ==" + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -2360,11 +2679,18 @@ "multicast-dns-service-types": "^1.1.0" } }, + "bplist-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", + "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", + "requires": { + "big-integer": "^1.6.7" + } + }, "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, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2545,6 +2871,21 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, + "bytebuffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", + "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", + "requires": { + "long": "~3" + }, + "dependencies": { + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -2829,8 +3170,7 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "codelyzer": { "version": "5.1.0", @@ -2894,6 +3234,11 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, + "colour": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", + "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2966,8 +3311,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", @@ -3091,212 +3435,48 @@ } }, "cordova-android": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-7.1.4.tgz", - "integrity": "sha512-Rtvu002I83uzfVyCsE6p2krFKVHt9TSAqZUATes+zH+o9cdxYGrLHY+PKCQo4SLCdSMdrkIHCDnQPTYTp/d7+g==", - "requires": { - "abbrev": "*", - "android-versions": "1.4.0", - "ansi": "*", - "balanced-match": "*", - "base64-js": "1.2.0", - "big-integer": "1.6.32", - "bplist-parser": "*", - "brace-expansion": "*", - "concat-map": "*", - "cordova-common": "2.2.5", - "cordova-registry-mapper": "*", - "elementtree": "0.1.6", - "glob": "5.0.15", - "inflight": "*", - "inherits": "*", - "minimatch": "*", - "nopt": "3.0.1", - "once": "*", - "path-is-absolute": "1.0.1", - "plist": "2.1.0", - "properties-parser": "0.2.3", - "q": "1.4.1", - "sax": "0.3.5", - "semver": "5.5.0", - "shelljs": "0.5.3", - "underscore": "*", - "unorm": "*", - "wrappy": "*", - "xmlbuilder": "8.2.2", - "xmldom": "*" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-8.0.0.tgz", + "integrity": "sha512-Ipv8HbVJpxEyYFSFLTEOaLRp0yxBtJVNbgSuDEB4naa34FzQaRWSNiiMcPJnO+x3hRXNt7pcwa46hARNzhn7+w==", + "requires": { + "android-versions": "^1.3.0", + "cordova-common": "^3.1.0", + "elementtree": "^0.1.7", + "nopt": "^4.0.1", + "properties-parser": "^0.3.1", + "q": "^1.4.1", + "shelljs": "^0.5.3" + } + }, + "cordova-common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.2.0.tgz", + "integrity": "sha512-EvlQ6PirfR65hGDoQvsluW00uSS2MTVIRKQ3c1Xvsddx7D5T5JgF3fHWkGik/Y/8yNcpI0zI2NcJyie2z/ak2A==", + "requires": { + "ansi": "^0.3.1", + "bplist-parser": "^0.1.0", + "cross-spawn": "^6.0.5", + "elementtree": "0.1.7", + "endent": "^1.1.1", + "fs-extra": "^8.0.0", + "glob": "^7.1.2", + "minimatch": "^3.0.0", + "plist": "^3.0.1", + "q": "^1.4.1", + "strip-bom": "^3.0.0", + "underscore": "^1.8.3", + "which": "^1.3.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "android-versions": { - "version": "1.4.0", - "bundled": true, - "requires": { - "semver": "^5.4.1" - } - }, - "ansi": { - "version": "0.3.1", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "base64-js": { - "version": "1.2.0", - "bundled": true - }, - "big-integer": { - "version": "1.6.32", - "bundled": true - }, - "bplist-parser": { - "version": "0.1.1", - "bundled": true, - "requires": { - "big-integer": "^1.6.7" - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "cordova-common": { - "version": "2.2.5", - "bundled": true, - "requires": { - "ansi": "^0.3.1", - "bplist-parser": "^0.1.0", - "cordova-registry-mapper": "^1.1.8", - "elementtree": "0.1.6", - "glob": "^5.0.13", - "minimatch": "^3.0.0", - "plist": "^2.1.0", - "q": "^1.4.1", - "shelljs": "^0.5.3", - "underscore": "^1.8.3", - "unorm": "^1.3.3" - } - }, - "cordova-registry-mapper": { - "version": "1.1.15", - "bundled": true - }, - "elementtree": { - "version": "0.1.6", - "bundled": true, - "requires": { - "sax": "0.3.5" - } - }, - "glob": { - "version": "5.0.15", - "bundled": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "nopt": { - "version": "3.0.1", - "bundled": true, - "requires": { - "abbrev": "1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "plist": { - "version": "2.1.0", - "bundled": true, - "requires": { - "base64-js": "1.2.0", - "xmlbuilder": "8.2.2", - "xmldom": "0.1.x" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } - }, - "properties-parser": { - "version": "0.2.3", - "bundled": true - }, - "q": { - "version": "1.4.1", - "bundled": true - }, - "sax": { - "version": "0.3.5", - "bundled": true - }, - "semver": { - "version": "5.5.0", - "bundled": true - }, - "shelljs": { - "version": "0.5.3", - "bundled": true - }, - "underscore": { - "version": "1.9.1", - "bundled": true - }, - "unorm": { - "version": "1.4.1", - "bundled": true - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "xmlbuilder": { - "version": "8.2.2", - "bundled": true - }, - "xmldom": { - "version": "0.1.27", - "bundled": true } } }, @@ -3340,6 +3520,19 @@ "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz", "integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q=" }, + "cordova-sqlite-storage": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cordova-sqlite-storage/-/cordova-sqlite-storage-3.3.0.tgz", + "integrity": "sha512-RBgGAe8rf/k54JC12xtt/14PxJrh42C4ISd+P8fqZq5Kw6JfQGh/55/VTsjI29rInl5jO5fwpYee/InGYlmI9w==", + "requires": { + "cordova-sqlite-storage-dependencies": "2.1.0" + } + }, + "cordova-sqlite-storage-dependencies": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cordova-sqlite-storage-dependencies/-/cordova-sqlite-storage-dependencies-2.1.0.tgz", + "integrity": "sha512-m0cPOWPzckAqS0/e7v+xtcM+FrHrw63qgh5T91JdkXMKCK8sN9bDoqVNJHZ5E9y7sRO7liMUIDm6Dz439RYqGA==" + }, "core-js": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", @@ -3404,7 +3597,6 @@ "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -3416,8 +3608,7 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" } } }, @@ -3529,8 +3720,7 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decode-uri-component": { "version": "0.2.0", @@ -3538,11 +3728,15 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" }, "default-gateway": { "version": "4.2.0", @@ -3567,7 +3761,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -3613,6 +3806,11 @@ } } }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, "del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -3779,6 +3977,11 @@ "void-elements": "^2.0.0" } }, + "dom-storage": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz", + "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==" + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -3819,6 +4022,21 @@ "integrity": "sha512-ZsaFWi+9J9Nsm4OmGM/BvZF3HEeZL4bte1+CcN9vHUcqdkOOVAXP4SeacPZ/W5uCQZEKPYBXg6yUjZx8/jpD0Q==", "dev": true }, + "elementtree": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", + "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", + "requires": { + "sax": "1.1.4" + }, + "dependencies": { + "sax": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", + "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=" + } + } + }, "elliptic": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", @@ -3856,7 +4074,6 @@ "version": "0.1.12", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, "requires": { "iconv-lite": "~0.4.13" } @@ -3870,6 +4087,16 @@ "once": "^1.4.0" } }, + "endent": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz", + "integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==", + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.3" + } + }, "engine.io": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", @@ -4017,7 +4244,6 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", @@ -4031,7 +4257,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4362,6 +4587,11 @@ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, + "fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==" + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -4462,6 +4692,25 @@ "locate-path": "^3.0.0" } }, + "firebase": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-6.4.0.tgz", + "integrity": "sha512-9ZzowmeBEGaHIiuJMVZL3oLkOvbNwRFAystAZi2ADqv0Kpo1cg3Anp5l1O+5ZILfG8a7/phr3nfsw/nGvf5gcQ==", + "requires": { + "@firebase/app": "0.4.14", + "@firebase/app-types": "0.4.3", + "@firebase/auth": "0.11.8", + "@firebase/database": "0.5.0", + "@firebase/firestore": "1.4.10", + "@firebase/functions": "0.4.15", + "@firebase/installations": "0.2.4", + "@firebase/messaging": "0.4.8", + "@firebase/performance": "0.2.15", + "@firebase/polyfill": "0.3.19", + "@firebase/storage": "0.3.9", + "@firebase/util": "0.2.25" + } + }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -4504,6 +4753,14 @@ } } }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4611,8 +4868,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.0.7", @@ -4624,8 +4880,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "genfun": { "version": "5.0.0", @@ -4667,7 +4922,6 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4693,45 +4947,531 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", + "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" + }, + "grpc": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.22.2.tgz", + "integrity": "sha512-gaK59oAA5/mlOIn+hQO5JROPoAzsaGRpEMcrAayW5WGETS8QScpBoQ+XBxEWAAF0kbeGIELuGRCVEObKS1SLmw==", + "requires": { + "lodash.camelcase": "^4.3.0", + "lodash.clone": "^4.5.0", + "nan": "^2.13.2", + "node-pre-gyp": "^0.13.0", + "protobufjs": "^5.0.3" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "chownr": { + "version": "1.1.1", + "bundled": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true + }, + "fs-minipass": { + "version": "1.2.6", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "needle": { + "version": "2.4.0", + "bundled": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "bundled": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true + } + } + }, + "node-pre-gyp": { + "version": "0.13.0", + "bundled": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true + }, + "protobufjs": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz", + "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==", + "requires": { + "ascli": "~1", + "bytebuffer": "~5", + "glob": "^7.0.5", + "yargs": "^3.10.0" + } + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.4", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "sax": { + "version": "1.2.4", + "bundled": true + }, + "semver": { + "version": "5.7.0", + "bundled": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.1", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "tar": { + "version": "4.4.10", + "bundled": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "3.0.3", + "bundled": true + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" } } } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==", - "dev": true - }, "handle-thing": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", @@ -4778,7 +5518,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -4824,8 +5563,7 @@ "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "has-value": { "version": "1.0.0", @@ -4973,8 +5711,7 @@ "http-parser-js": { "version": "0.4.10", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", - "dev": true + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" }, "http-proxy": { "version": "1.17.0", @@ -5077,11 +5814,15 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, + "idb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz", + "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==" + }, "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", @@ -5119,8 +5860,7 @@ "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, "import-cwd": { "version": "2.1.0", @@ -5176,7 +5916,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5185,8 +5924,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -5324,8 +6062,7 @@ "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-data-descriptor": { "version": "0.1.4", @@ -5350,8 +6087,7 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { "version": "0.1.6", @@ -5469,7 +6205,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^1.0.1" } @@ -5477,14 +6212,12 @@ "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -5525,8 +6258,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -5534,6 +6266,15 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -5859,7 +6600,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -6035,7 +6775,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -6078,7 +6819,8 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -6089,7 +6831,8 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6206,7 +6949,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6218,6 +6962,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6247,6 +6992,7 @@ "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -6265,6 +7011,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -6345,7 +7092,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6357,6 +7105,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6442,7 +7191,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6478,6 +7228,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6497,6 +7248,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6540,12 +7292,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 } } }, @@ -6749,6 +7503,32 @@ "json5": "^1.0.1" } }, + "localforage": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz", + "integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=", + "requires": { + "lie": "3.1.1" + }, + "dependencies": { + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "~3.0.5" + } + } + } + }, + "localforage-cordovasqlitedriver": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.7.0.tgz", + "integrity": "sha1-i5OVd1nuaI06WNW6fAR39sy1ODg=", + "requires": { + "localforage": ">=1.5.0" + } + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -6765,6 +7545,16 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.clone": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -6813,6 +7603,11 @@ "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", "dev": true }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -7133,7 +7928,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7141,8 +7935,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minipass": { "version": "2.3.5", @@ -7282,9 +8075,7 @@ "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, "nanomatch": { "version": "1.2.13", @@ -7320,8 +8111,16 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } }, "node-fetch-npm": { "version": "2.0.2", @@ -7396,6 +8195,15 @@ } } }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -7533,8 +8341,7 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "oauth-sign": { "version": "0.9.0", @@ -7585,11 +8392,15 @@ } } }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", @@ -7619,6 +8430,14 @@ "isobject": "^3.0.1" } }, + "objectorarray": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz", + "integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==", + "requires": { + "tape": "^4.8.0" + } + }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", @@ -7644,7 +8463,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -7702,6 +8520,11 @@ } } }, + "optjs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", + "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -7720,8 +8543,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "3.1.0", @@ -7737,14 +8559,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -7948,8 +8768,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -7960,14 +8779,12 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "0.1.7", @@ -8047,6 +8864,16 @@ "find-up": "^3.0.0" } }, + "plist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", + "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", + "requires": { + "base64-js": "^1.2.3", + "xmlbuilder": "^9.0.7", + "xmldom": "0.1.x" + } + }, "portfinder": { "version": "1.0.21", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", @@ -8174,6 +9001,11 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "promise-polyfill": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz", + "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==" + }, "promise-retry": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", @@ -8192,6 +9024,41 @@ } } }, + "properties-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", + "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=", + "requires": { + "string.prototype.codepointat": "^0.2.0" + } + }, + "protobufjs": { + "version": "6.8.8", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz", + "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.0", + "@types/node": "^10.1.0", + "long": "^4.0.0" + }, + "dependencies": { + "@types/node": { + "version": "10.14.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz", + "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA==" + } + } + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -8434,8 +9301,7 @@ "q": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" }, "qjobs": { "version": "1.2.0", @@ -8784,6 +9650,14 @@ "signal-exit": "^3.0.2" } }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "requires": { + "through": "~2.3.4" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8850,8 +9724,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -8865,8 +9738,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { "version": "1.22.2", @@ -9177,7 +10049,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -9185,8 +10056,12 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shelljs": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", + "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=" }, "signal-exit": { "version": "3.0.2", @@ -9861,6 +10736,21 @@ } } }, + "string.prototype.codepointat": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==" + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9874,7 +10764,6 @@ "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" } @@ -9882,8 +10771,7 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-eof": { "version": "1.0.0", @@ -9972,6 +10860,36 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, + "tape": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz", + "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==", + "requires": { + "deep-equal": "~1.0.1", + "defined": "~1.0.0", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.4", + "has": "~1.0.3", + "inherits": "~2.0.4", + "minimist": "~1.2.0", + "object-inspect": "~1.6.0", + "resolve": "~1.11.1", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.1.2", + "through": "~2.3.8" + }, + "dependencies": { + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, "tar": { "version": "4.4.10", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", @@ -10035,8 +10953,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", @@ -10295,6 +11212,11 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -10356,8 +11278,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "unpipe": { "version": "1.0.0", @@ -11527,7 +12448,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -11555,6 +12477,7 @@ "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11569,7 +12492,8 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", @@ -11580,7 +12504,8 @@ "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -11697,7 +12622,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -11709,6 +12635,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -11723,6 +12650,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11730,12 +12658,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -11754,6 +12684,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -11834,7 +12765,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -11846,6 +12778,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -11931,7 +12864,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -11967,6 +12901,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -11986,6 +12921,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -12029,12 +12965,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 } } }, @@ -12153,7 +13091,6 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dev": true, "requires": { "http-parser-js": ">=0.4.0 <0.4.11", "safe-buffer": ">=5.1.0", @@ -12163,8 +13100,12 @@ "websocket-extensions": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "when": { "version": "3.6.4", @@ -12176,7 +13117,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -12187,6 +13127,11 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -12215,7 +13160,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -12225,7 +13169,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -12234,7 +13177,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -12246,8 +13188,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { "version": "6.2.1", @@ -12279,8 +13220,17 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" }, "xmlhttprequest-ssl": { "version": "1.5.5", diff --git a/package.json b/package.json index 15e61f5..66c8e59 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@angular/common": "~8.1.2", "@angular/compiler": "~8.1.2", "@angular/core": "~8.1.2", + "@angular/fire": "^5.2.1", "@angular/forms": "~8.1.2", "@angular/platform-browser": "~8.1.2", "@angular/platform-browser-dynamic": "~8.1.2", @@ -28,8 +29,9 @@ "@ionic-native/splash-screen": "^5.0.0", "@ionic-native/status-bar": "^5.12.0", "@ionic/angular": "^4.7.1", + "@ionic/storage": "^2.2.0", "agm-direction": "^0.7.8", - "cordova-android": "7.1.4", + "cordova-android": "^8.0.0", "cordova-plugin-device": "^2.0.2", "cordova-plugin-geolocation": "4.0.2", "cordova-plugin-ionic-keyboard": "^2.1.3", @@ -38,7 +40,9 @@ "cordova-plugin-splashscreen": "^5.0.2", "cordova-plugin-statusbar": "^2.4.2", "cordova-plugin-whitelist": "^1.3.3", + "cordova-sqlite-storage": "^3.3.0", "core-js": "^2.5.4", + "firebase": "^6.4.0", "rxjs": "~6.5.1", "tslib": "^1.9.0", "zone.js": "~0.9.1" @@ -83,10 +87,11 @@ "cordova-plugin-geolocation": { "GEOLOCATION_USAGE_DESCRIPTION": "To locate you" }, - "cordova-plugin-nativegeocoder": {} + "cordova-plugin-nativegeocoder": {}, + "cordova-sqlite-storage": {} }, "platforms": [ "android" ] } -} +} \ No newline at end of file diff --git a/resources/README.md b/resources/README.md deleted file mode 100644 index 46c696e..0000000 --- a/resources/README.md +++ /dev/null @@ -1,8 +0,0 @@ -These are Cordova resources. You can replace icon.png and splash.png and run -`ionic cordova resources` to generate custom icons and splash screens for your -app. See `ionic cordova resources --help` for details. - -Cordova reference documentation: - -- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html -- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/ diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 46187b2..4c81842 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -15,10 +15,8 @@ export class AppComponent { private splashScreen: SplashScreen, private statusBar: StatusBar ) { - this.initializeApp(); } - initializeApp() { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a59e868..da3c17d 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -6,10 +6,23 @@ import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { IonicStorageModule } from '@ionic/storage'; + + import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { AngularFireModule } from '@angular/fire'; +import { AngularFirestore } from '@angular/fire/firestore'; +import { AngularFirestoreModule } from '@angular/fire/firestore'; +import { AngularFireAuthModule } from '@angular/fire/auth'; + +import { environment } from '../environments/environment'; +import { ServiceService } from './../config/service.service'; +import { AuthService } from './../config/auth.service'; +import { from } from 'rxjs'; + @@ -19,14 +32,19 @@ import { AppComponent } from './app.component'; entryComponents: [], imports: [BrowserModule, IonicModule.forRoot(), + IonicStorageModule.forRoot(), AppRoutingModule, BrowserAnimationsModule, - + AngularFireModule.initializeApp(environment.firebase), + AngularFireAuthModule, + AngularFirestoreModule ], providers: [ StatusBar, SplashScreen, - { provide: RouteReuseStrategy, useClass: IonicRouteStrategy } + { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }, + ServiceService, + AuthService ], bootstrap: [AppComponent] }) diff --git a/src/app/cart/cart.page.html b/src/app/cart/cart.page.html index 90eb42e..35a7e65 100644 --- a/src/app/cart/cart.page.html +++ b/src/app/cart/cart.page.html @@ -26,17 +26,17 @@ </ul> </div> <div class="cart_content"> - <ion-slides pager="false" [options]="cart_wizard" (ionSlideDidChange)="slideChanged()"> + <ion-slides pager="false" [options]="cartwizard" (ionSlideDidChange)="slideChanged()"> <ion-slide> - <div class="cart_list"> - <ul> - <li> + <div class="cart_list" *ngIf="cartService.carts"> + <ul *ngIf="cartService.carts.length > 0"> + <li *ngFor="let carts of cartService.carts"> <div class="close"></div> - <div class="cart_image"></div> + <div class="cart_image"><img [src]="carts.image" onerror="this.src=''" /></div> <div class="cart_detail"> - <h4>European Style V neck</h4> - <h4>Green, Red</h4> - <h5>AU$99.00</h5> + <h4>{{carts.prodName}}</h4> + <h4>{{carts.size}}, {{carts.color}}</h4> + <h5>A$ {{carts.price}}</h5> </div> <div class="cart_count"> <div class="add" (click)="addCount()">+</div> @@ -44,45 +44,15 @@ <div class="remove" (click)="removeCount()">-</div> </div> <div class="clear"></div> - </li> - <li> - <div class="close"></div> - <div class="cart_image"></div> - <div class="cart_detail"> - <h4>European Style V neck</h4> - <h4>Green, Red</h4> - <h5>AU$99.00</h5> - </div> - <div class="cart_count"> - <div class="add" (click)="addCount()">+</div> - <div class="count">{{count}}</div> - <div class="remove" (click)="removeCount()">-</div> - </div> - <div class="clear"></div> - </li> - <li> - <div class="close"></div> - <div class="cart_image"></div> - <div class="cart_detail"> - <h4>European Style V neck</h4> - <h4>Green, Red</h4> - <h5>AU$99.00</h5> - </div> - <div class="cart_count"> - <div class="add" (click)="addCount()">+</div> - <div class="count">{{count}}</div> - <div class="remove" (click)="removeCount()">-</div> - </div> - <div class="clear"></div> - </li> + </li> </ul> - <div class="total_div"> + <div class="total_div" *ngIf="cartService.cartTotal"> <ion-row> <ion-col> <p class="textLeft">Total Price:</p> </ion-col> <ion-col> - <p class="textRight">AU$ 239.00</p> + <p class="textRight">A$ {{cartService.cartTotal}}</p> </ion-col> </ion-row> </div> @@ -92,43 +62,21 @@ <div class="checkout_list"> <h5> <span class="floatLeft">ITEMS</span> - <span class="floatRight">AU$239.00</span> + <span class="floatRight" *ngIf="cartService.cartTotal">A$ {{cartService.cartTotal}}</span> <div class="clear"></div> </h5> - <ion-grid class="p0"> - <ion-row> + <ion-grid class="p0" *ngIf="cartService.carts && cartService.carts.length > 0"> + <ion-row *ngFor="let carts of cartService.carts"> <ion-col size="6" class="p0"> - <h6 class="textLeft">European Style V Neck</h6> + <h6 class="textLeft">{{carts.prodName}}</h6> </ion-col> <ion-col size="2" class="p0"> <h6 class="textRight"><strong>1 X</strong></h6> </ion-col> <ion-col size="4" class="p0"> - <h6 class="textRight"><strong>AU$99.00</strong></h6> - </ion-col> - </ion-row> - <ion-row> - <ion-col size="6" class="p0"> - <h6 class="textLeft">Simple Night Wear black doted</h6> - </ion-col> - <ion-col size="2" class="p0"> - <h6 class="textRight"><strong>3 X</strong></h6> - </ion-col> - <ion-col size="4" class="p0"> - <h6 class="textRight"><strong>AU$60.00</strong></h6> + <h6 class="textRight"><strong>A$ {{carts.price}}</strong></h6> </ion-col> - </ion-row> - <ion-row> - <ion-col size="6" class="p0"> - <h6 class="textLeft">European Style V Neck</h6> - </ion-col> - <ion-col size="2" class="p0"> - <h6 class="textRight"><strong>3 X</strong></h6> - </ion-col> - <ion-col size="4" class="p0"> - <h6 class="textRight"><strong>AU$90.00</strong></h6> - </ion-col> - </ion-row> + </ion-row> </ion-grid> <hr> <h5> @@ -192,7 +140,7 @@ <h4>Order Placed</h4> <p>June 26th 2019, 03:00 PM</p> <h3>The product will be delivered in</h3> - <h1>10:00 Mins</h1> + <h1>60:00 Mins</h1> <button class="view_order" (click)="goToPage('myorder')">VIEW ORDERS</button><br> <button class="home_btn" (click)="goToPage('home')">HOME</button> </div> @@ -200,14 +148,14 @@ </ion-slides> </div> </div> - <div class="footer_btn" [hidden]="currentIndex != 0" (click)="next()"> + <div class="footer_btn" *ngIf="cartService.carts && cartService.carts.length > 0" [hidden]="currentIndex != 0" (click)="next(1)"> CHECKOUT </div> - <div class="footer_btn" [hidden]="currentIndex != 1" (click)="next()"> + <div class="footer_btn" *ngIf="cartService.carts && cartService.carts.length > 0" [hidden]="currentIndex != 1" (click)="next(2);"> PAY </div> - <div class="footer_btn" [hidden]="currentIndex != 2" (click)="goToPage('orderplaced')"> + <!-- <div class="footer_btn" [hidden]="currentIndex != 2" (click)="goToPage('orderplaced')"> FINISH - </div> + </div> --> </div> </ion-content> \ No newline at end of file diff --git a/src/app/cart/cart.page.scss b/src/app/cart/cart.page.scss index 5d01eeb..b7b2a6d 100644 --- a/src/app/cart/cart.page.scss +++ b/src/app/cart/cart.page.scss @@ -179,6 +179,8 @@ } .cart_list { width: 100%; + height: calc(100vh - 200px); + overflow: scroll; ul { margin: 0px; padding: 10px; diff --git a/src/app/cart/cart.page.ts b/src/app/cart/cart.page.ts index 86d24b1..d863e64 100644 --- a/src/app/cart/cart.page.ts +++ b/src/app/cart/cart.page.ts @@ -2,6 +2,8 @@ import { Component, OnInit, ViewChild } from '@angular/core'; import { IonSlides } from '@ionic/angular'; import { Location } from '@angular/common'; import { Router, ActivatedRoute } from '@angular/router'; +import { CartsService } from './../../config/cart.service'; +import { OrdersService } from './../../config/order.service'; @Component({ @@ -13,22 +15,31 @@ export class CartPage implements OnInit { @ViewChild(IonSlides, { static: false }) slides: IonSlides; currentIndex: any; - count:any; + count: any; + cartwizard = { + initialSlide: 0, + speed: 1000, + allowTouchMove: false + }; constructor( private router: Router, private route: ActivatedRoute, - private location: Location - ) { + private location: Location, + public cartService: CartsService, + public orderService: OrdersService + ) { this.currentIndex = 0; - this.count = 0; + this.count = 1; + this.cartService.cartList(); } ngOnInit() { } - + + goToPage(path, data = null) { this.router.navigateByUrl(path, { queryParams: data }); document.body.scrollTop = document.documentElement.scrollTop = 0; @@ -36,30 +47,33 @@ export class CartPage implements OnInit { goBack() { this.location.back(); - } - - cart_wizard = { - initialSlide: 0, - speed: 1000, - allowTouchMove: false - }; + } - next() { - this.slides.slideNext(); + + next(index: number = null) { + console.log(index); + if (index === 2) { + const state = this.orderService.checkOut(this.cartService.carts).then((data) => { + console.log('ready for slide'); + this.slides.slideNext(); + }); + } else { + this.slides.slideNext(); + } } prev() { this.slides.slidePrev(); } - addCount(){ - this.count = this.count+1 + addCount() { + // this.count = this.count+1 } removeCount() { - this.count = this.count - 1; - if(this.count <0){ + // this.count = this.count - 1; + if (this.count <0){ this.count = 0; } } @@ -69,8 +83,16 @@ export class CartPage implements OnInit { this.slides.getActiveIndex().then(index => { this.currentIndex = index; console.log(this.currentIndex); - }); } + sliderChange() { + this.orderService.checkout.subscribe(state => { + if (state) { + this.next(); + this.orderService.checkout.next(false); + } + }); + } + } diff --git a/src/app/catagory/catagory.page.html b/src/app/catagory/catagory.page.html index 767df45..c69271b 100644 --- a/src/app/catagory/catagory.page.html +++ b/src/app/catagory/catagory.page.html @@ -1,5 +1,5 @@ <div class="nav_header"> - <button class="nav_btn nav_back floatLeft"> + <button class="nav_btn nav_back floatLeft" (click)="goBack()"> <img src="../assets/Group22_2.png"> </button> <div class="nav_title floatLeft"> diff --git a/src/app/catagory/catagory.page.ts b/src/app/catagory/catagory.page.ts index 015d9d9..352f670 100644 --- a/src/app/catagory/catagory.page.ts +++ b/src/app/catagory/catagory.page.ts @@ -1,4 +1,6 @@ import { Component, OnInit } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Location } from '@angular/common'; @Component({ selector: 'app-catagory', @@ -7,9 +9,21 @@ import { Component, OnInit } from '@angular/core'; }) export class CatagoryPage implements OnInit { - constructor() { } + constructor( + public router: Router, + public location: Location + ) { } ngOnInit() { } + goToPage(path, data = null) { + this.router.navigateByUrl(path, { queryParams: data }); + document.body.scrollTop = document.documentElement.scrollTop = 0; + } + + goBack() { + this.location.back(); + } + } diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html index 11c50c1..7cec067 100644 --- a/src/app/home/home.page.html +++ b/src/app/home/home.page.html @@ -24,21 +24,21 @@ </div> <ion-slides pager="true"> <ion-slide> - <div class="banner_slide" (click)="goToPage('productlist')"> + <div class="banner_slide" (click)="goToPage('storelist')"> <h5>Lulu Fashion</h5> <p>Women Fashion</p> </div> <img src="../assets/portrait-smiling-woman-with-shopping-bags-smartphone_1262-14313_2.png"> </ion-slide> <ion-slide> - <div class="banner_slide" (click)="goToPage('productlist')"> + <div class="banner_slide" (click)="goToPage('storelist')"> <h5>Lulu Fashion</h5> <p>Women Fashion</p> </div> <img src="../assets/portrait-smiling-woman-with-shopping-bags-smartphone_1262-14313_2.png"> </ion-slide> <ion-slide> - <div class="banner_slide" (click)="goToPage('productlist')"> + <div class="banner_slide" (click)="goToPage('storelist')"> <h5>Lulu Fashion</h5> <p>Women Fashion</p> </div> diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index a1eb3d3..be4307b 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -23,8 +23,9 @@ export class HomePage implements OnInit { isShow = false; slideOpts = { - slidesPerView:1.5 - } + slidesPerView: 1.5 + }; + constructor( private router: Router, private route: ActivatedRoute, @@ -47,5 +48,4 @@ export class HomePage implements OnInit { this.isShow = !this.isShow; } - } diff --git a/src/app/landing/landing.page.ts b/src/app/landing/landing.page.ts index 07eaf24..c0811c6 100644 --- a/src/app/landing/landing.page.ts +++ b/src/app/landing/landing.page.ts @@ -1,6 +1,7 @@ import { Component, OnInit, ViewChild, } from '@angular/core'; import { IonSlides } from '@ionic/angular'; import { Router, ActivatedRoute } from '@angular/router'; +import { ServiceService } from './../../config/service.service'; @Component({ selector: 'app-landing', @@ -9,25 +10,35 @@ import { Router, ActivatedRoute } from '@angular/router'; }) export class LandingPage implements OnInit { + slideOpts = { + initialSlide: 0, + speed: 1000, + allowTouchMove: false + }; + @ViewChild(IonSlides, { static: false })slides: IonSlides; currentIndex: any; - constructor(private router: Router, private route: ActivatedRoute) { } + constructor( + private router: Router, + private route: ActivatedRoute, + private service: ServiceService + ) { + this.service.get('landing').then((data) => { + if (data === true) { + this.goToPage('login'); + } + }); + } ngOnInit() { } goToPage(path, data = null) { + this.service.set('landing', true); this.router.navigateByUrl(path, { queryParams: data }); document.body.scrollTop = document.documentElement.scrollTop = 0; } - slideOpts = { - initialSlide: 0, - speed: 1000, - allowTouchMove: false - }; - - next() { this.slides.slideNext(); } @@ -42,6 +53,6 @@ export class LandingPage implements OnInit { console.log(this.currentIndex); }); - } + } } diff --git a/src/app/login/login.page.html b/src/app/login/login.page.html index 15f0ef0..eaf6fac 100644 --- a/src/app/login/login.page.html +++ b/src/app/login/login.page.html @@ -15,13 +15,13 @@ </div> <div class="form_div"> <div class="row"> - <input class="" type="text" placeholder="User Name/ Email"> + <input class="" type="text" placeholder="User Name/ Email" #userName required> </div> <div class="row"> - <input class="" type="password" placeholder="Password"> + <input class="" type="password" placeholder="Password" #userPassword required> </div> <div class="row"> - <button class="login_btn" (click)="goToPage('home')">LOGIN</button> + <button class="login_btn" (click)="authService.SignIn(userName.value, userPassword.value)">LOGIN</button> </div> <div class="row"> <hr> diff --git a/src/app/login/login.page.ts b/src/app/login/login.page.ts index 24aaaca..44530c1 100644 --- a/src/app/login/login.page.ts +++ b/src/app/login/login.page.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Router, ActivatedRoute } from '@angular/router'; -import { async } from "q"; +import { AuthService } from './../../config/auth.service'; +import { async } from 'q'; @Component({ selector: 'app-login', @@ -9,7 +10,11 @@ import { async } from "q"; }) export class LoginPage implements OnInit { - constructor(private router: Router, private route: ActivatedRoute) { } + constructor( + private router: Router, + private route: ActivatedRoute, + public authService: AuthService + ) { } ngOnInit() { } diff --git a/src/app/myorder/myorder.page.html b/src/app/myorder/myorder.page.html index da70bbb..b98e59f 100644 --- a/src/app/myorder/myorder.page.html +++ b/src/app/myorder/myorder.page.html @@ -7,25 +7,25 @@ <div class="clear"></div> </div> <ion-content> - <div class="myorder_wrapper"> - <ul> - <li> - <div class="order_image"></div> + <div class="myorder_wrapper" *ngIf="myorder.orders"> + <ul *ngIf="myorder.orders.length > 0"> + <li *ngFor="let order of myorder.orders; let i = index"> + <div class="order_image"><img [src]="order.image" onerror="" /></div> <div class="order_detail"> - <h5 class="floatLeft">European Style V Neck</h5> + <h5 class="floatLeft">{{order.prodName}}</h5> <div class="clear"></div> - <h5>Green, Small <span>3</span></h5> - <p>AU$99.00</p> + <h5>{{order.color}}, {{order.size}} <span>{{order.qty}}</span></h5> + <p>{{order.amount}}</p> </div> <div class="order_other"> - <h6 class="floatRight">June 26th 2019</h6> + <h6 class="floatRight">{{ order.bookDate.seconds * 1000 | date:'MMMM dd, y' }}</h6> <div class="clear"></div> - <button class="track_btn" (click)=" goToPage('trackorder')">TRACK</button> + <button class="track_btn" *ngIf="order.orderStatus == 3" (click)="orderDetails(i)">TRACK</button> <div class="clear"></div> </div> <div class="clear"></div> </li> - <li> + <!-- <li> <div class="order_image"></div> <div class="order_detail"> <h5 class="floatLeft">European Style V Neck</h5> @@ -70,7 +70,7 @@ <div class="clear"></div> </div> <div class="clear"></div> - </li> + </li> --> </ul> </div> </ion-content> \ No newline at end of file diff --git a/src/app/myorder/myorder.page.ts b/src/app/myorder/myorder.page.ts index 19e028e..3d899bf 100644 --- a/src/app/myorder/myorder.page.ts +++ b/src/app/myorder/myorder.page.ts @@ -1,6 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Location } from '@angular/common'; import { Router, ActivatedRoute } from '@angular/router'; +import { MyordersService } from './../../config/myorder.service'; @Component({ selector: 'app-myorder', @@ -12,7 +13,8 @@ export class MyorderPage implements OnInit { constructor( private router: Router, private route: ActivatedRoute, - private location: Location + private location: Location, + public myorder: MyordersService ) { } ngOnInit() { @@ -25,6 +27,12 @@ export class MyorderPage implements OnInit { goBack() { this.location.back(); - } + } + + orderDetails(index: number) { + this.myorder.trackOrder(this.myorder.orders[index]); + this.router.navigateByUrl('trackorder'); + document.body.scrollTop = document.documentElement.scrollTop = 0; + } } diff --git a/src/app/productdetail/productdetail.page.html b/src/app/productdetail/productdetail.page.html index ec45df6..7abf637 100644 --- a/src/app/productdetail/productdetail.page.html +++ b/src/app/productdetail/productdetail.page.html @@ -9,75 +9,45 @@ <div class="clear"></div> </div> <ion-content> - <div class="product_detail_wrapper"> + <div class="product_detail_wrapper" *ngIf="product"> <div class="product_banner"> <div class="fav_icon"></div> - <div class="featured_badge">Featured</div> - <img src="../assets/model1@3x.jpg"> + <div class="featured_badge" *ngIf="product.featured">Featured</div> + <img [src]="product.image" onerror="this.src='../assets/model1@3x.jpg'"> </div> <div class="product_header"> <ion-row> <ion-col size="8"> - <h3>European style V Neck</h3> - <p><strong><span><img src="../assets/Path61_2.png"></span>4</strong>Lulu Fashion, Women's Fashion + <h3>{{product.prodName}}</h3> + <p><strong><span><img src="../assets/Path61_2.png"></span>4</strong>Lulu Fashion, {{product.category}} </p> </ion-col> <ion-col size="4"> - <h5>AU$99.00</h5> + <h5>A$ {{product.price}}</h5> + <p><span class="offer" *ngIf="product.discount > 0">-{{product.discount}}%</span></p> </ion-col> </ion-row> </div> <div class="product_div_content"> <h5>Size</h5> <div class="size_div"> - <ul> + <ul *ngIf="product.size"> <ion-slides pager="false" [options]="slideOpts"> - <ion-slide> - <li> - <button id="custom_check_button"> - <label> - <input id="1" type="radio" name="services" value=""> - <p>Small</p> - </label> - </button> - </li> - </ion-slide> - <ion-slide> - <li> - <button id="custom_check_button"> - <label> - <input id="2" type="radio" name="services" value=""> - <p>Medium</p> - </label> - </button> - </li> - </ion-slide> - <ion-slide> - <li> - <button id="custom_check_button"> - <label> - <input id="3" type="radio" name="services" value=""> - <p>Large</p> - </label> - </button> - </li> - </ion-slide> - <ion-slide> + <ion-slide *ngFor="let size of product.size; let i = index"> <li> <button id="custom_check_button"> <label> - <input id="4" type="radio" name="services" value=""> - <p>Xtra Large</p> + <input id="{{size.sizeId}}" type="radio" name="services" value="{{size.sizeId}}" (click)="cartService.choose_size(size.sizeName)" [checked]="i==0"> + <p>{{size.sizeName}}</p> </label> </button> </li> - </ion-slide> + </ion-slide> </ion-slides> </ul> </div> <h5>Description</h5> - <p>Brand - SMART SHOP Fabric- Net Work - Embroidered Colour- White Occasion - Wedding,Festival Wash Care- Normal Wash Type- Anarkali Sleeve- Full Sleeve Dupatta- No Neck- Round This product make you more beautiful and pretty from other. This - product has good quality material. Buy only original that product with us for get satisfy. Buy only original Buy only that + <p>{{product.prodDesc}} </p> <h5> <span class="floatLeft">Reviews</span><span class="floatRight" (click)="goToPage('reviewlist')">MORE</span> @@ -206,6 +176,6 @@ <button class="fav"></button> <button class="cart" (click)="goToPage('cart')"></button> </div> - <div class="footer_btn" (click)="goToPage('cart')">BUY NOW</div> + <div class="footer_btn" (click)="cartService.buyNow(product)">BUY NOW</div> </div> </ion-content> \ No newline at end of file diff --git a/src/app/productdetail/productdetail.page.ts b/src/app/productdetail/productdetail.page.ts index d0bd968..022daaf 100644 --- a/src/app/productdetail/productdetail.page.ts +++ b/src/app/productdetail/productdetail.page.ts @@ -1,6 +1,11 @@ import { Component, OnInit } from '@angular/core'; import { Location } from '@angular/common'; import { Router, ActivatedRoute } from '@angular/router'; +import { Products } from './../../config/services/product'; +import { Order } from './../../config/services/order'; +import { CartsService } from './../../config/cart.service'; +import { ProductsService } from './../../config/products.service'; +import { map } from 'rxjs/operators'; @Component({ selector: 'app-productdetail', @@ -8,22 +13,63 @@ import { Router, ActivatedRoute } from '@angular/router'; styleUrls: ['./productdetail.page.scss'], }) export class ProductdetailPage implements OnInit { + product: Products; + order: Order; slideOpts = { slidesPerView: 3.5 - } + }; relatedProd = { slidesPerView: 2 - } + }; constructor( private router: Router, private route: ActivatedRoute, - private location: Location - ) { } + private location: Location, + private cartService: CartsService, + private prodService: ProductsService + ) { + } ngOnInit() { + console.log('here'); + const params = this.prodService.selItem; + if (params) { + const prod: Products = { + prodId: params.prodId, + prodName: params.prodName, + prodCode: params.prodCode, + prodDesc: params.prodDesc, + prodStatus: params.prodStatus, + brand: params.brand, + category: params.category, + color: params.color, + discount: params.discount, + featured: params.featured, + image: params.image, + price: params.price, + qty: params.qty, + shopper: params.shopper, + skuCode: params.skuCode, + status: params.status, + size: params.size, + currency: params.currency + }; + this.product = prod; + } else { + this.product = undefined; + } + console.log(this.product); + } + + stringObject(items: any) { + items.forEach(element => { + console.log(element.sizeId); + element = JSON.parse(element); + console.log(element); + }); } goToPage(path, data = null) { diff --git a/src/app/productlist/productlist.page.html b/src/app/productlist/productlist.page.html index 49fcb6e..d31db8b 100644 --- a/src/app/productlist/productlist.page.html +++ b/src/app/productlist/productlist.page.html @@ -27,44 +27,17 @@ <div class="product_title"> Lulu Fashion </div> - <ul [class.grid_view]="onGrid"> - <li (click)="goToPage('productdetail')"> + <ul [class.grid_view]="onGrid" *ngIf="prodService.product && prodService.product.length > 0"> + <li *ngFor="let product of prodService.product; let i = index" (click)="prodDetails(i)"> <div class="product_image"> - <img src="../assets/model1@3x.png"> + <img [src]="product.image" onerror="this.src='../assets/model1@3x.png'"> <div class="fav_icon"> </div> + <div class="featured_badge" *ngIf="product.featured">Featured</div> </div> - <h5>European Style V Neck</h5> - <p>AU$99.00</p> - </li> - <li (click)="goToPage('productdetail')"> - <div class="product_image"> - <img src="../assets/Recommended-Ball-Gown-Floor-Length-V-Neck-Lace-Organza-Prom-Dress-OD850662@3x.png"> - <div class="fav_icon"> - </div> - </div> - <h5>European Style V Neck</h5> - <p>AU$99.00</p> - </li> - <li (click)="goToPage('productdetail')"> - <div class="product_image"> - <img src="../assets/51oNoK8JdCL._UY550_@3x.png"> - <div class="fav_icon"> - </div> - </div> - <h5>European Style V Neck</h5> - <p>AU$99.00 <span class="offer">-8%</span></p> - </li> - <li (click)="goToPage('productdetail')"> - <div class="product_image"> - <img src="../assets/DOGTS033-111-495x660@3x.png"> - <div class="fav_icon"> - </div> - <div class="featured_badge">Featured</div> - </div> - <h5>European Style V Neck</h5> - <p>AU$99.00<span>AU$110.00</span></p> - </li> + <h5>{{product.prodName}}</h5> + <p>A$ {{product.price}}<span class="offer" *ngIf="product.discount > 0">-{{product.discount}}%</span></p> + </li> </ul> </div> <div class="sort_wrappper" *ngIf="isShow" [@slideInOut]> diff --git a/src/app/productlist/productlist.page.ts b/src/app/productlist/productlist.page.ts index 227ac84..3c40dd6 100644 --- a/src/app/productlist/productlist.page.ts +++ b/src/app/productlist/productlist.page.ts @@ -1,7 +1,8 @@ import { Component, OnInit } from '@angular/core'; import { Location } from '@angular/common'; import { trigger, transition, animate, style } from '@angular/animations'; -import { Router, ActivatedRoute } from '@angular/router'; +import { Router, ActivatedRoute, NavigationExtras } from '@angular/router'; +import { ProductsService } from './../../config/products.service'; @Component({ @@ -28,10 +29,12 @@ export class ProductlistPage implements OnInit { constructor( private router: Router, private route: ActivatedRoute, - private location: Location + private location: Location, + public prodService: ProductsService ) { } ngOnInit() { + this.prodService.prodList(); } goToPage(path, data = null) { @@ -51,4 +54,10 @@ export class ProductlistPage implements OnInit { gridToggle(){ this.onGrid = !this.onGrid; } + + prodDetails(index: number) { + this.prodService.setProd(this.prodService.product[index]); + this.router.navigateByUrl('productdetail'); + document.body.scrollTop = document.documentElement.scrollTop = 0; + } } diff --git a/src/app/storelist/storelist.page.html b/src/app/storelist/storelist.page.html index 21e3935..99b8589 100644 --- a/src/app/storelist/storelist.page.html +++ b/src/app/storelist/storelist.page.html @@ -1,5 +1,5 @@ <div class="nav_header"> - <button class="nav_btn nav_back floatLeft"> + <button class="nav_btn nav_back floatLeft" (click)="goBack()"> </button> <div class="nav_title floatLeft"> <input class="search_bar" placeholder="Search here.. eg:shirts, retailers etc..."> </div> @@ -15,7 +15,7 @@ <div class="featured_slider"> <ion-slides pager="false" [options]="slideOpts"> <ion-slide> - <div class="feature_product" (click)="goToPage('productlist')"> + <div class="feature_product" (click)="goToPage('catagory')"> <img src="../assets/videoblocks-woman-using-phone-purchase-in-cool-sunglasses-and-black-dress-holding-black-shopping-bag-isolated-on-dark-background-in-black-friday-holid@3x.png"> <div class="feature_overlay"> <h5>Flames Fashion</h5> @@ -24,7 +24,7 @@ </div> </ion-slide> <ion-slide> - <div class="feature_product" (click)="goToPage('productlist')"> + <div class="feature_product" (click)="goToPage('catagory')"> <img src="../assets/business-casual-sneakers-men-1-1024x1024@3x.png"> <div class="feature_overlay"> <h5>Flames Fashion</h5> @@ -33,7 +33,7 @@ </div> </ion-slide> <ion-slide> - <div class="feature_product" (click)="goToPage('productlist')"> + <div class="feature_product" (click)="goToPage('catagory')"> <img src="../assets/videoblocks-woman-using-phone-purchase-in-cool-sunglasses-and-black-dress-holding-black-shopping-bag-isolated-on-dark-background-in-black-friday-holid@3x.png"> <div class="feature_overlay"> <h5>Flames Fashion</h5> @@ -48,7 +48,7 @@ </div> <div class="nearby_shop_list"> <ul> - <li (click)="goToPage('productlist')"> + <li (click)="goToPage('catagory')"> <div class="nearby_image"> <img src="../assets/5bf42c4220000057060294f8@3x.png"> </div> @@ -64,7 +64,7 @@ </div> <div class="clear"></div> </li> - <li (click)="goToPage('productlist')"> + <li (click)="goToPage('catagory')"> <div class="nearby_image"> <img src="../assets/Gentleman-style-menswear-mens-fashion@3x.png"> </div> @@ -80,7 +80,7 @@ </div> <div class="clear"></div> </li> - <li (click)="goToPage('productlist')"> + <li (click)="goToPage('catagory')"> <div class="nearby_image"> <img src="../assets/f484ec0330d1a103ac58341c9184df2a@3x.png"> </div> @@ -97,7 +97,7 @@ <div class="clear"></div> </li> - <li (click)="goToPage('productlist')"> + <li (click)="goToPage('catagory')"> <div class="nearby_image"> <img src="../assets/2193bb91-3be9-4de9-96f4-4ce7aab8547e1558436499234-RARE-Women-Black-Printed-A-Line-Dress-6731558436495088-1@3x.png"> </div> diff --git a/src/app/storelist/storelist.page.ts b/src/app/storelist/storelist.page.ts index 0d31169..58693d1 100644 --- a/src/app/storelist/storelist.page.ts +++ b/src/app/storelist/storelist.page.ts @@ -1,4 +1,6 @@ import { Component, OnInit } from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Location } from '@angular/common'; @Component({ selector: 'app-storelist', @@ -9,11 +11,23 @@ export class StorelistPage implements OnInit { slideOpts = { slidesPerView: 1.5 - } + }; - constructor() { } + constructor( + public router: Router, + public location: Location + ) { } ngOnInit() { } + goToPage(path, data = null) { + this.router.navigateByUrl(path, { queryParams: data }); + document.body.scrollTop = document.documentElement.scrollTop = 0; + } + + goBack() { + this.location.back(); + } + } diff --git a/src/app/trackorder/trackorder.page.html b/src/app/trackorder/trackorder.page.html index 6ac6d14..3711104 100644 --- a/src/app/trackorder/trackorder.page.html +++ b/src/app/trackorder/trackorder.page.html @@ -17,14 +17,14 @@ </div> --> </div> - <div class="rider_footer "> + <div class="rider_footer" *ngIf="order"> <div class="rider_image "></div> <div class="rider_detail "> - <h5>John Doe</h5> + <h5>{{order.riderName}}</h5> <p>Rider</p> </div> <div class="rider_time "> - 18<span>Mins</span> + {{order.time}}<span>Mins</span> </div> <div class="rider_call ">Call Rider</div> <div class="clear "></div> diff --git a/src/app/trackorder/trackorder.page.ts b/src/app/trackorder/trackorder.page.ts index aaaaf25..c1e2102 100644 --- a/src/app/trackorder/trackorder.page.ts +++ b/src/app/trackorder/trackorder.page.ts @@ -2,6 +2,8 @@ import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; import { Location } from '@angular/common'; import { Router, ActivatedRoute } from '@angular/router'; +import { MyordersService } from './../../config/myorder.service'; +import { Myorder } from './../../config/services/myorder'; declare var google; @@ -13,7 +15,8 @@ declare var google; export class TrackorderPage implements OnInit { map: any; - address: string + address: string; + order: Myorder; public lat: number = 51.678418; public lng: number = 7.809007; @@ -25,10 +28,11 @@ export class TrackorderPage implements OnInit { constructor( private router: Router, private route: ActivatedRoute, - private location: Location + private location: Location, + public myorder: MyordersService ) { } - + ngOnInit() { this.getDirection(); } @@ -46,8 +50,9 @@ export class TrackorderPage implements OnInit { getDirection() { - this.origin = { lat: 51.678418, lng: 7.809007 }; - this.destination = { lat: 51.678418, lng: 7.81900 }; + this.order = this.myorder.selItem; + this.origin = { lat: this.order.pickupLocation._lat, lng: this.order.pickupLocation._long }; + this.destination = { lat: this.order.deliveryLocation._lat, lng: this.order.deliveryLocation._long }; this.renderOptions = { polylineOptions: { strokeColor: 'rgba(69, 67, 152,1)' }, suppressMarkers: true }; this.markerOptions = { origin: { diff --git a/src/config/auth.service.ts b/src/config/auth.service.ts new file mode 100644 index 0000000..d92c927 --- /dev/null +++ b/src/config/auth.service.ts @@ -0,0 +1,76 @@ +import { Injectable } from '@angular/core'; +import { User } from './services/user'; +import { auth } from 'firebase/app'; +import { Router, ActivatedRoute } from '@angular/router'; +import { AngularFireAuth } from '@angular/fire/auth'; +import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore'; +import { ServiceService } from './../config/service.service'; +import { from } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + userData: any; + + constructor( + public afs: AngularFirestore, + public afAuth: AngularFireAuth, + private router: Router, + private service: ServiceService + ) { + this.afAuth.authState.subscribe(user => { + if (user) { + this.userData = user; + this.service.set('user', JSON.stringify(this.userData)); + } else { + this.service.set('user', null); + JSON.parse(localStorage.getItem('user')); + } + }); + } + + public async SignIn(email: string, password: string) { + return this.afAuth.auth.signInWithEmailAndPassword(email, password).then((result) => { + console.log('success'); + this.router.navigateByUrl('home'); + document.body.scrollTop = document.documentElement.scrollTop = 0; + this.SetUserData(result.user); + }).catch((error) => { + window.alert(error.message); + }); + } + + get isLoggedIn(): boolean { + const user = JSON.parse(localStorage.getItem('user')); + return (user !== null && user.emailVerified !== false) ? true : false; + } + + SetUserData(user: any) { + + const userRef: AngularFirestoreDocument<any> = this.afs.doc(`customers/${user.uid}`); + userRef.valueChanges().subscribe((value) => { + const userData: User = { + uid: value.uid, + emailId: value.emailId, + name: value.name, + profilePhoto: value.profilePhoto, + emailVerified: value.emailVerified, + phone: value.phone, + phoneVerified: value.phoneVerified, + status: value.status, + currency: value.currency + }; + console.log(userData); + }); + } + + public async SignOut() { + return this.afAuth.auth.signOut().then(() => { + this.service.remove('user'); + console.log('logout'); + }); + } + + +} diff --git a/src/config/cart.service.ts b/src/config/cart.service.ts new file mode 100644 index 0000000..5d0f25c --- /dev/null +++ b/src/config/cart.service.ts @@ -0,0 +1,127 @@ +import { Injectable } from '@angular/core'; +import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Products } from './services/product'; +import { Cart, CartItem } from './services/cart'; +import { ServiceService } from './service.service'; +import * as firebase from 'firebase'; +import { take } from 'rxjs/operators'; +import { User } from './services/user'; +import { from } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class CartsService { + size: string; + color: string; + custId: string; + prodId: string; + cart: Cart; + user: User; + carts: CartItem[] = []; + cartTotal: number; + + constructor( + public afs: AngularFirestore, + public router: Router, + public service: ServiceService + ) { + this.size = 'Small'; + this.custId = ''; + const users = this.service.get('user').then((data) => { + if (data) { + data = JSON.parse(data); + this.custId = data.uid; + console.log(this.custId); + } else { + this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2'; + } + }); + } + + public async buyNow(product: Products) { + this.color = 'Blue'; + this.prodId = product.prodId; + const prodRef = firebase.firestore().collection('products').doc(this.prodId); + + const cartRef: AngularFirestoreCollection<any> = this.afs.collection('carts', ref => ref.where('size', '==', this.size) + .where('color', '==', this.color) + .where('custId', '==', this.custId) + .where('product', '==', prodRef) + ); + cartRef.valueChanges().pipe(take(1)).subscribe((value: Cart[]) => { + console.log(value); + if (value.length === 0) { + const cart: Cart = { + color: this.color, + custId: this.custId, + product: firebase.firestore().doc(`products/${this.prodId}`), + image: product.image, + prodId: product.prodId, + price: product.price, + prodName: product.prodName, + shopper: product.shopper, + qty: 1, + size: this.size + }; + this.afs.collection('carts').add(cart).then((docRef) => { + const neworderId = docRef.id; + this.afs.collection('carts').doc(neworderId).update({cartId: docRef.id}).then(() => { + console.log('Booking Successfully'); + this.router.navigateByUrl('cart'); + document.body.scrollTop = document.documentElement.scrollTop = 0; + }); + }).catch((error) => { + console.error('Error adding document: ', error); + }); + } else { + alert('Item already added in the cart'); + } + }); + } + + public async cartList() { + const cartRef: AngularFirestoreCollection<any> = this.afs.collection('carts', ref => ref.where('custId', '==', this.custId)); + cartRef.valueChanges().subscribe((value) => { + this.carts = []; + const res = value; + this.cartTotal = 0; + if (res.length > 0) { + res.forEach((item) => { + const cartItem: CartItem = { + cartId: item.cartId, + color: item.color, + shopperId: item.shopper, + prodId: item.prodId, + price: item.price, + prodName: item.prodName, + image: item.image, + qty: item.qty, + size: item.size, + }; + this.cartTotal += item.price; + /*const prodItem = item.product.get().then((property) => { + const response = property.data(); + cartItem.prodName = response.prodName; + cartItem.price = response.price; + cartItem.image = response.image; + cartItem.prodId = response.prodId; + cartItem.shopperId = response.shopper; + this.cartTotal += response.price; + });*/ + this.carts.push(cartItem); + }); + } else { + // alert('No Products Found'); + } + }); + } + + choose_size(size: string) { + this.size = size; + } + + + +} diff --git a/src/config/myorder.service.ts b/src/config/myorder.service.ts new file mode 100644 index 0000000..b8701e1 --- /dev/null +++ b/src/config/myorder.service.ts @@ -0,0 +1,74 @@ +import { Injectable } from '@angular/core'; +import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore'; +import { Myorder } from './services/myorder'; +import { ServiceService } from './../config/service.service'; +import * as firebase from 'firebase'; + +@Injectable({ + providedIn: 'root' +}) +export class MyordersService { + product: Myorder[] = []; + custId: string; + orders: Myorder[]; + selItem: Myorder; + + constructor( + public afs: AngularFirestore, + public service: ServiceService + ) { + const users = this.service.get('user').then((data) => { + if (data) { + data = JSON.parse(data); + this.custId = data.uid; + if (this.custId !== undefined) { + this.orderList(this.custId); + } + } else { + this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2'; + } + }); + } + + public async orderList(custId) { + console.log('called'); + console.log(custId); + const This = this; + const orderRef: AngularFirestoreCollection<any> = this.afs.collection('orders', ref => ref.where('custId', '==', custId) + .orderBy('bookDate', 'desc')); + orderRef.valueChanges().subscribe((value) => { + console.log(value); + this.orders = []; + const res = value; + if (res.length > 0) { + res.forEach((item) => { + console.log(item); + const order: Myorder = { + prodName: item.prodName, + color: item.color, + image: item.image, + amount: item.amount, + qty: item.qty, + status: item.status, + orderStatus: item.orderStatus, + bookDate: item.bookDate, + deliveryLocation: item.deliveryLocation, + pickupLocation: item.pickupLocation, + riderName: 'John', + size: item.size, + time: '60' + }; + this.orders.push(order); + }); + console.log(this.orders); + } else { + alert('No Orders Found'); + } + }); + } + + public async trackOrder(order) { + this.selItem = order; + } + +} diff --git a/src/config/order.service.ts b/src/config/order.service.ts new file mode 100644 index 0000000..2a08bc5 --- /dev/null +++ b/src/config/order.service.ts @@ -0,0 +1,122 @@ +import { Injectable } from '@angular/core'; +import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore'; +import { Router, ActivatedRoute } from '@angular/router'; +import { Order } from './services/order'; +import { Products } from './services/product'; +import { ServiceService } from './service.service'; +import * as firebase from 'firebase'; +import { CartItem } from './services/cart'; +import { BehaviorSubject } from 'rxjs'; + + +@Injectable({ + providedIn: 'root' +}) +export class OrdersService { + order: Order; + size: string; + color: string; + custId: string; + shopperId: any; + checkout = new BehaviorSubject(false); + + constructor( + public afs: AngularFirestore, + public router: Router, + public service: ServiceService + ) { + this.size = 'small'; + this.color = 'Blue'; + this.custId = ''; + const users = this.service.get('user').then((data) => { + if (data) { + data = JSON.parse(data); + this.custId = data.uid; + console.log(this.custId); + } else { + this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2'; + } + }); + } + + public async checkOut(cart: CartItem[]) { + console.log(cart); + let currProcess = 0; + const cartCount = cart.length; + cart.forEach((product) => { + this.afs.collection('orders').add({ + bookDate: firebase.firestore.FieldValue.serverTimestamp() + }).then((docRef) => { + const neworderId = docRef.id; + const delivery = new firebase.firestore.GeoPoint(10.0237, 76.3116); + const pickup = new firebase.firestore.GeoPoint(10.7231, 76.1234); + const orderItem: Order = { + amount: 'A$ 175', + customer: firebase.firestore().doc('/customer/' + this.custId), + shopper: product.shopperId, + deliveryAddress: 'Techware Software solution, Carnival Infopark, Kochi', + deliveryCharge: 'A$ 0.5', + deliveryLocation: delivery, + bookDate: firebase.firestore.FieldValue.serverTimestamp(), + discount: 'A$ 12.00', + orderCode: this.orderCode(), + orderId: neworderId, + orderStatus: 1, + pickupAddress: 'GetMi, Canberra, AUS', + pickupLocation: pickup, + price: 'A$ ' + product.price, + product: firebase.firestore().doc('/product/' + product.prodId), + promoId: null, + qty: product.qty, + rider: firebase.firestore().doc('/riders/qbTKza18mWVzYG9NLIbmjMbrYjG2'), + status: 1, + tax: 'A$ 7.5', + size: product.size, + color: product.color, + custId: this.custId, + image: product.image, + prodId: product.prodId, + prodName: product.prodName, + riderId: 'qbTKza18mWVzYG9NLIbmjMbrYjG2', + shopperId: 'qbTKza18mWVzYG9NLIbmjMbrYjG2' + }; + this.afs.collection('orders').doc(neworderId).set(orderItem).then(() => { + currProcess += 1; + console.log('Booking Successfully'); + this.afs.doc(`carts/${product.cartId}`).delete(); + // this.router.navigateByUrl('cart'); + console.log(currProcess, cartCount); + document.body.scrollTop = document.documentElement.scrollTop = 0; + if (currProcess === cartCount) { + // this.router.navigateByUrl('cart'); + return true; + } + }); + }).catch((error) => { + console.error('Error adding document: ', error); + }); + }); + + } + + public async buyNow(product: Products) { + // + } + + orderCode() { + const newpin = Math.round(Math.random() * 1000000); + const orderCode = 'GM' + this.pad(newpin, 6, null); + return orderCode; + } + + pad(n, width, z) { + z = z || '0'; + n = n + ''; + return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; + } + + choose_size(size: string) { + this.size = size; + } + +} diff --git a/src/config/products.service.ts b/src/config/products.service.ts new file mode 100644 index 0000000..03fdc0e --- /dev/null +++ b/src/config/products.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore'; +import { Products } from './services/product'; +import { ServiceService } from './../config/service.service'; + +@Injectable({ + providedIn: 'root' +}) +export class ProductsService { + product: Products[] = []; + selItem: Products; + + constructor( + public afs: AngularFirestore, + public service: ServiceService + ) { } + + public async prodList() { + const This = this; + const prodRef: AngularFirestoreCollection<any> = this.afs.collection(`products`); + prodRef.valueChanges().subscribe((value) => { + this.product = []; + const res = value; + if (res.length > 0) { + res.forEach((item) => { + console.log(item.size); + const prod: Products = { + prodId: item.prodId, + prodName: item.prodName, + prodCode: item.prodCode, + prodDesc: item.prodDesc, + prodStatus: item.prodStatus, + brand: item.brand.brandName, + category: item.category.catName, + color: item.color, + discount: item.discount, + featured: item.featured, + image: item.image, + price: item.price, + qty: item.qty, + shopper: item.shopper, + skuCode: item.skuCode, + status: item.status, + size: this.service.key2Array(item.size), + currency: item.currency + }; + this.product.push(prod); + }); + console.log(this.product); + } else { + alert('No Products Found'); + } + }); + } + + public async setProd(item: Products) { + this.selItem = item; + } + +} diff --git a/src/config/service.service.ts b/src/config/service.service.ts new file mode 100644 index 0000000..f32ef6e --- /dev/null +++ b/src/config/service.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { Storage } from '@ionic/storage'; + +@Injectable({ + providedIn: 'root' +}) +export class ServiceService { + + constructor(public storage: Storage) { } + + public set(settingName: string, value: any) { + return this.storage.set(`setting:${ settingName }`, value); + } + + public async get(settingName: string) { + return await this.storage.get(`setting:${ settingName }`); + } + + public async remove(settingName: string) { + return await this.storage.remove(`setting:${ settingName }`); + } + + public clear() { + this.storage.clear().then(() => { + console.log('all keys cleared'); + }); + } + + public key2Array(item: object) { + const response = []; + for (const key in item) { + if (item.hasOwnProperty(key)) { + response.push(item[key]); + } + } + return response; + } + + +} diff --git a/src/config/services/cart.ts b/src/config/services/cart.ts new file mode 100644 index 0000000..ce03b00 --- /dev/null +++ b/src/config/services/cart.ts @@ -0,0 +1,25 @@ +export interface Cart { + custId: string; + shopper: any; + product: any; + prodName: any; + prodId: string; + image: string; + size: string; + color: string; + qty: number; + price: number; +} + +export interface CartItem { + cartId: string; + prodId: string; + shopperId: any; + prodName: any; + image: string; + size: string; + color: string; + qty: number; + price: number; +} + diff --git a/src/config/services/myorder.ts b/src/config/services/myorder.ts new file mode 100644 index 0000000..2629ee8 --- /dev/null +++ b/src/config/services/myorder.ts @@ -0,0 +1,16 @@ +export interface Myorder { + amount: string; + prodName: any; + image: string; + size: string; + color: string; + qty: number; + bookDate: any; + pickupLocation: any; + deliveryLocation: any; + status: number; + orderStatus: number; + riderName: string; + time: string; +} + diff --git a/src/config/services/order.ts b/src/config/services/order.ts new file mode 100644 index 0000000..8fe3528 --- /dev/null +++ b/src/config/services/order.ts @@ -0,0 +1,34 @@ +import { AngularFirestoreDocument } from '@angular/fire/firestore'; +import { GeoJsonOptions } from '@agm/core/services/google-maps-types'; + +export interface Order { + amount: string; + customer: any; + deliveryAddress: string; + deliveryCharge: string; + deliveryLocation: object; + discount: string; + orderCode: string; + orderId: string; + orderStatus: number; + pickupAddress: string; + pickupLocation: object; + price: string; + bookDate: any; + prodId: string; + custId: string; + product: any; + prodName: any; + image: string; + size: string; + color: string; + promoId: any; + qty: number; + rider: any; + riderId: string; + shopper: any; + shopperId: string; + status: number; + tax: string; +} + diff --git a/src/config/services/product.ts b/src/config/services/product.ts new file mode 100644 index 0000000..1f0aee7 --- /dev/null +++ b/src/config/services/product.ts @@ -0,0 +1,29 @@ +export interface Products { + brand: string; + category: string; + color: string; + discount: number; + featured: boolean; + image: string; + price: number; + prodCode: string; + prodDesc: string; + prodId: string; + prodName: string; + prodStatus: boolean; + qty: number; + shopper: string; + size: Size[]; + skuCode: string; + status: boolean; + currency: { + currId: string; + currName: string; + symbol: string + }; +} + +export interface Size { + sizeId: string; + sizeName: string; +} diff --git a/src/config/services/user.ts b/src/config/services/user.ts new file mode 100644 index 0000000..77eb24a --- /dev/null +++ b/src/config/services/user.ts @@ -0,0 +1,15 @@ +export interface User { + uid: string; + emailId: string; + name: string; + phone: string; + phoneVerified: boolean; + profilePhoto: string; + emailVerified: boolean; + status: boolean; + currency: { + currId: string; + currName: string; + symbol: string + }; +} diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 7b4f817..7ed1339 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -3,7 +3,16 @@ // The list of file replacements can be found in `angular.json`. export const environment = { - production: false + production: false, + firebase: { + apiKey: 'AIzaSyDzc8lCO4NAfc3PbXPQjvmSWDbsw-yTqXw', + authDomain: 'getmi-4fd26.firebaseapp.com', + databaseURL: 'https://getmi-4fd26.firebaseio.com', + projectId: 'getmi-4fd26', + storageBucket: 'getmi-4fd26.appspot.com', + messagingSenderId: '949385251610', + appId: '1:949385251610:web:cec06e05a0b1aa58' + } }; /*