├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── LICENSE ├── README.md ├── babel.config.js ├── jsconfig.json ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── icons │ ├── favicon-128x128.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ └── favicon-96x96.png ├── quasar.conf.js ├── src-cordova ├── .gitignore ├── config.xml ├── cordova-flag.d.ts ├── package-lock.json └── package.json ├── src-electron ├── electron-flag.d.ts ├── icons │ ├── icon.icns │ ├── icon.ico │ └── linux-512x512.png └── main-process │ ├── electron-main.dev.js │ └── electron-main.js └── src ├── App.vue ├── assets └── quasar-logo-full.svg ├── boot ├── .gitkeep └── firebase.js ├── css ├── app.sass └── quasar.variables.sass ├── index.template.html ├── layouts └── MainLayout.vue ├── pages ├── Error404.vue ├── PageAbout.vue └── PageHome.vue └── router ├── index.js └── routes.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .thumbs.db 3 | node_modules 4 | 5 | # Quasar core related directories 6 | .quasar 7 | /dist 8 | 9 | # Cordova related directories and files 10 | /src-cordova/node_modules 11 | /src-cordova/platforms 12 | /src-cordova/plugins 13 | /src-cordova/www 14 | 15 | # Capacitor related directories and files 16 | /src-capacitor/www 17 | /src-capacitor/node_modules 18 | 19 | # BEX related directories and files 20 | /src-bex/www 21 | /src-bex/js/core 22 | 23 | # Log files 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # Editor directories and files 29 | .idea 30 | *.suo 31 | *.ntvs* 32 | *.njsproj 33 | *.sln 34 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | plugins: [ 5 | // to edit target browsers: use "browserslist" field in package.json 6 | require('autoprefixer') 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Danny Connell 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Qwitter (qwitter) 2 | 3 | A Cross-Platrom Twitter Clone created with Quasar Framework, VueJS & Firebase 4 | 5 | ## Setup Firebase 6 | - Create a new Firebase project named Qwitter 7 | - Create a Web App named Qwitter 8 | - Copy the config from the code sample that appears and add it to src/boot/firebase.js 9 | - Create a Cloud Firestore database - make sure you choose "Start in test mode" 10 | 11 | ## Install the dependencies 12 | ```bash 13 | npm install 14 | ``` 15 | 16 | ## Web Version 17 | 18 | ### Start in development mode 19 | ```bash 20 | quasar dev 21 | ``` 22 | 23 | ### Build for production 24 | ```bash 25 | quasar build 26 | ``` 27 | 28 | ## Desktop Version (Electron) 29 | 30 | ### Start in development mode 31 | ```bash 32 | quasar dev -m electron 33 | ``` 34 | 35 | ### Build for production 36 | To build for different platforms, change the `electron > packager > platform` setting in `quasar.conf.js` to `win32`, `darwin`, `mas` or `linux` 37 | ```bash 38 | quasar build -m electron 39 | ``` 40 | 41 | ## iOS Version (Cordova) 42 | 43 | ### Install Cordova globally 44 | ```bash 45 | npm install -g cordova 46 | ``` 47 | or 48 | ```bash 49 | sudo npm install -g cordova 50 | ``` 51 | 52 | ### Install Xcode 53 | 54 | [Install Xcode](https://developer.apple.com/download/more/) 55 | 56 | ### Start in development mode 57 | ```bash 58 | quasar dev -m cordova -T ios 59 | ``` 60 | 61 | ### Start on other Simulator Devices 62 | ```bash 63 | cd src-cordova 64 | cordova run ios --list 65 | cd .. 66 | quasar dev -m cordova -T ios -e "iPhone-12, 14.3" 67 | ``` 68 | 69 | ### Build for production 70 | ```bash 71 | quasar build -m cordova -T ios 72 | ``` 73 | 74 | ## Android Version (Cordova) 75 | 76 | ### Install Cordova globally 77 | ```bash 78 | npm install -g cordova 79 | ``` 80 | or 81 | ```bash 82 | sudo npm install -g cordova 83 | ``` 84 | 85 | ### Follow all steps on Quasar site 86 | 87 | [Follow all steps on Quasar site](https://quasar.dev/quasar-cli/developing-cordova-apps/preparation#Android-setup) 88 | 89 | ### Launch Android Virtual Device 90 | Android Studio > Configure > AVD Manager > Launch an AVD 91 | 92 | ### Start in development mode 93 | ```bash 94 | quasar dev -m cordova -T android 95 | ``` 96 | 97 | ### Build for production 98 | ```bash 99 | quasar build -m cordova -T android 100 | ``` -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | presets: [ 4 | '@quasar/babel-preset-app' 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "src/*": [ 6 | "src/*" 7 | ], 8 | "app/*": [ 9 | "*" 10 | ], 11 | "components/*": [ 12 | "src/components/*" 13 | ], 14 | "layouts/*": [ 15 | "src/layouts/*" 16 | ], 17 | "pages/*": [ 18 | "src/pages/*" 19 | ], 20 | "assets/*": [ 21 | "src/assets/*" 22 | ], 23 | "boot/*": [ 24 | "src/boot/*" 25 | ], 26 | "vue$": [ 27 | "node_modules/vue/dist/vue.esm.js" 28 | ] 29 | } 30 | }, 31 | "exclude": [ 32 | "dist", 33 | ".quasar", 34 | "node_modules" 35 | ] 36 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "qwitter", 3 | "version": "0.0.1", 4 | "description": "A Quasar Framework app", 5 | "productName": "Qwitter", 6 | "author": "Danny Connell", 7 | "private": true, 8 | "scripts": { 9 | "test": "echo \"No test specified\" && exit 0" 10 | }, 11 | "dependencies": { 12 | "@quasar/extras": "^1.0.0", 13 | "core-js": "^3.6.5", 14 | "date-fns": "^2.16.1", 15 | "firebase": "^8.2.4", 16 | "quasar": "^1.0.0" 17 | }, 18 | "devDependencies": { 19 | "@quasar/app": "^2.0.0", 20 | "devtron": "^1.4.0", 21 | "electron": "^9.4.1", 22 | "electron-debug": "^3.2.0", 23 | "electron-devtools-installer": "^3.1.1", 24 | "electron-packager": "^14.2.1" 25 | }, 26 | "browserslist": [ 27 | "last 10 Chrome versions", 28 | "last 10 Firefox versions", 29 | "last 4 Edge versions", 30 | "last 7 Safari versions", 31 | "last 8 Android versions", 32 | "last 8 ChromeAndroid versions", 33 | "last 8 FirefoxAndroid versions", 34 | "last 10 iOS versions", 35 | "last 5 Opera versions" 36 | ], 37 | "engines": { 38 | "node": ">= 10.18.1", 39 | "npm": ">= 6.13.4", 40 | "yarn": ">= 1.21.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/public/favicon.ico -------------------------------------------------------------------------------- /public/icons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/public/icons/favicon-128x128.png -------------------------------------------------------------------------------- /public/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/public/icons/favicon-16x16.png -------------------------------------------------------------------------------- /public/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/public/icons/favicon-32x32.png -------------------------------------------------------------------------------- /public/icons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/public/icons/favicon-96x96.png -------------------------------------------------------------------------------- /quasar.conf.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file runs in a Node context (it's NOT transpiled by Babel), so use only 3 | * the ES6 features that are supported by your Node version. https://node.green/ 4 | */ 5 | 6 | // Configuration for your app 7 | // https://quasar.dev/quasar-cli/quasar-conf-js 8 | 9 | module.exports = function (/* ctx */) { 10 | return { 11 | // https://quasar.dev/quasar-cli/supporting-ts 12 | supportTS: false, 13 | 14 | // https://quasar.dev/quasar-cli/prefetch-feature 15 | // preFetch: true, 16 | 17 | // app boot file (/src/boot) 18 | // --> boot files are part of "main.js" 19 | // https://quasar.dev/quasar-cli/boot-files 20 | boot: [ 21 | 'firebase' 22 | ], 23 | 24 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css 25 | css: [ 26 | 'app.sass' 27 | ], 28 | 29 | // https://github.com/quasarframework/quasar/tree/dev/extras 30 | extras: [ 31 | // 'ionicons-v4', 32 | // 'mdi-v5', 33 | 'fontawesome-v5', 34 | // 'eva-icons', 35 | // 'themify', 36 | // 'line-awesome', 37 | // 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both! 38 | 39 | 'roboto-font', // optional, you are not bound to it 40 | 'material-icons', // optional, you are not bound to it 41 | ], 42 | 43 | // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build 44 | build: { 45 | vueRouterMode: 'hash', // available values: 'hash', 'history' 46 | 47 | // transpile: false, 48 | 49 | // Add dependencies for transpiling with Babel (Array of string/regex) 50 | // (from node_modules, which are by default not transpiled). 51 | // Applies only if "transpile" is set to true. 52 | // transpileDependencies: [], 53 | 54 | // rtl: false, // https://quasar.dev/options/rtl-support 55 | // preloadChunks: true, 56 | // showProgress: false, 57 | // gzip: true, 58 | // analyze: true, 59 | 60 | // Options below are automatically set depending on the env, set them if you want to override 61 | // extractCSS: false, 62 | 63 | // https://quasar.dev/quasar-cli/handling-webpack 64 | extendWebpack (cfg) { 65 | }, 66 | }, 67 | 68 | // Full list of options: https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer 69 | devServer: { 70 | https: false, 71 | port: 8080, 72 | open: true // opens browser window automatically 73 | }, 74 | 75 | // https://quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework 76 | framework: { 77 | iconSet: 'material-icons', // Quasar icon set 78 | lang: 'en-us', // Quasar language pack 79 | config: {}, 80 | 81 | // Possible values for "importStrategy": 82 | // * 'auto' - (DEFAULT) Auto-import needed Quasar components & directives 83 | // * 'all' - Manually specify what to import 84 | importStrategy: 'auto', 85 | 86 | // For special cases outside of where "auto" importStrategy can have an impact 87 | // (like functional components as one of the examples), 88 | // you can manually specify Quasar components/directives to be available everywhere: 89 | // 90 | // components: [], 91 | // directives: [], 92 | 93 | // Quasar plugins 94 | plugins: [] 95 | }, 96 | 97 | // animations: 'all', // --- includes all animations 98 | // https://quasar.dev/options/animations 99 | animations: ['fadeIn', 'fadeOut'], 100 | 101 | // https://quasar.dev/quasar-cli/developing-ssr/configuring-ssr 102 | ssr: { 103 | pwa: false 104 | }, 105 | 106 | // https://quasar.dev/quasar-cli/developing-pwa/configuring-pwa 107 | pwa: { 108 | workboxPluginMode: 'GenerateSW', // 'GenerateSW' or 'InjectManifest' 109 | workboxOptions: {}, // only for GenerateSW 110 | manifest: { 111 | name: `Qwitter`, 112 | short_name: `Qwitter`, 113 | description: `A Quasar Framework app`, 114 | display: 'standalone', 115 | orientation: 'portrait', 116 | background_color: '#ffffff', 117 | theme_color: '#027be3', 118 | icons: [ 119 | { 120 | src: 'icons/icon-128x128.png', 121 | sizes: '128x128', 122 | type: 'image/png' 123 | }, 124 | { 125 | src: 'icons/icon-192x192.png', 126 | sizes: '192x192', 127 | type: 'image/png' 128 | }, 129 | { 130 | src: 'icons/icon-256x256.png', 131 | sizes: '256x256', 132 | type: 'image/png' 133 | }, 134 | { 135 | src: 'icons/icon-384x384.png', 136 | sizes: '384x384', 137 | type: 'image/png' 138 | }, 139 | { 140 | src: 'icons/icon-512x512.png', 141 | sizes: '512x512', 142 | type: 'image/png' 143 | } 144 | ] 145 | } 146 | }, 147 | 148 | // Full list of options: https://quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova 149 | cordova: { 150 | // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing 151 | }, 152 | 153 | // Full list of options: https://quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor 154 | capacitor: { 155 | hideSplashscreen: true 156 | }, 157 | 158 | // Full list of options: https://quasar.dev/quasar-cli/developing-electron-apps/configuring-electron 159 | electron: { 160 | bundler: 'packager', // 'packager' or 'builder' 161 | 162 | packager: { 163 | 164 | // platform: 'win32' 165 | 166 | // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options 167 | 168 | // OS X / Mac App Store 169 | // appBundleId: '', 170 | // appCategoryType: '', 171 | // osxSign: '', 172 | // protocol: 'myapp://path', 173 | 174 | // Windows only 175 | // win32metadata: { ... } 176 | }, 177 | 178 | builder: { 179 | // https://www.electron.build/configuration/configuration 180 | 181 | appId: 'qwitter' 182 | }, 183 | 184 | // More info: https://quasar.dev/quasar-cli/developing-electron-apps/node-integration 185 | nodeIntegration: true, 186 | 187 | extendWebpack (/* cfg */) { 188 | // do something with Electron main process Webpack cfg 189 | // chainWebpack also available besides this extendWebpack 190 | } 191 | } 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /src-cordova/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Generated by package manager 4 | node_modules/ 5 | 6 | # Generated by Cordova 7 | /plugins/ 8 | /platforms/ 9 | -------------------------------------------------------------------------------- /src-cordova/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Qwitter 4 | A Quasar Framework app 5 | 6 | Apache Cordova Team 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src-cordova/cordova-flag.d.ts: -------------------------------------------------------------------------------- 1 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 2 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 3 | import "quasar/dist/types/feature-flag"; 4 | 5 | declare module "quasar/dist/types/feature-flag" { 6 | interface QuasarFeatureFlags { 7 | cordova: true; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src-cordova/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.dannyconnell.qwitter", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@netflix/nerror": { 8 | "version": "1.1.3", 9 | "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz", 10 | "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==", 11 | "dev": true, 12 | "requires": { 13 | "assert-plus": "^1.0.0", 14 | "extsprintf": "^1.4.0", 15 | "lodash": "^4.17.15" 16 | } 17 | }, 18 | "@nodelib/fs.scandir": { 19 | "version": "2.1.4", 20 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", 21 | "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", 22 | "dev": true, 23 | "requires": { 24 | "@nodelib/fs.stat": "2.0.4", 25 | "run-parallel": "^1.1.9" 26 | } 27 | }, 28 | "@nodelib/fs.stat": { 29 | "version": "2.0.4", 30 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", 31 | "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", 32 | "dev": true 33 | }, 34 | "@nodelib/fs.walk": { 35 | "version": "1.2.6", 36 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", 37 | "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", 38 | "dev": true, 39 | "requires": { 40 | "@nodelib/fs.scandir": "2.1.4", 41 | "fastq": "^1.6.0" 42 | } 43 | }, 44 | "abbrev": { 45 | "version": "1.1.1", 46 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 47 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 48 | "dev": true 49 | }, 50 | "android-versions": { 51 | "version": "1.6.0", 52 | "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.6.0.tgz", 53 | "integrity": "sha512-ojC2Ig7b/KJ6iNtR8e4bacmOsJyEkoERk3CKMIsnH7kJz5z6551NMbrVaRb7KXYavu1d74Uhml/bfcmqT3nAcg==", 54 | "dev": true, 55 | "requires": { 56 | "semver": "^5.7.1" 57 | }, 58 | "dependencies": { 59 | "semver": { 60 | "version": "5.7.1", 61 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 62 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 63 | "dev": true 64 | } 65 | } 66 | }, 67 | "ansi": { 68 | "version": "0.3.1", 69 | "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", 70 | "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", 71 | "dev": true 72 | }, 73 | "assert-plus": { 74 | "version": "1.0.0", 75 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 76 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 77 | "dev": true 78 | }, 79 | "at-least-node": { 80 | "version": "1.0.0", 81 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", 82 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", 83 | "dev": true 84 | }, 85 | "balanced-match": { 86 | "version": "1.0.0", 87 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 88 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 89 | "dev": true 90 | }, 91 | "base64-js": { 92 | "version": "1.5.1", 93 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 94 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 95 | "dev": true 96 | }, 97 | "big-integer": { 98 | "version": "1.6.48", 99 | "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", 100 | "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", 101 | "dev": true 102 | }, 103 | "bplist-creator": { 104 | "version": "0.0.8", 105 | "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", 106 | "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", 107 | "dev": true, 108 | "requires": { 109 | "stream-buffers": "~2.2.0" 110 | } 111 | }, 112 | "bplist-parser": { 113 | "version": "0.2.0", 114 | "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", 115 | "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", 116 | "dev": true, 117 | "requires": { 118 | "big-integer": "^1.6.44" 119 | } 120 | }, 121 | "brace-expansion": { 122 | "version": "1.1.11", 123 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 124 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 125 | "dev": true, 126 | "requires": { 127 | "balanced-match": "^1.0.0", 128 | "concat-map": "0.0.1" 129 | } 130 | }, 131 | "braces": { 132 | "version": "3.0.2", 133 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 134 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 135 | "dev": true, 136 | "requires": { 137 | "fill-range": "^7.0.1" 138 | } 139 | }, 140 | "concat-map": { 141 | "version": "0.0.1", 142 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 143 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 144 | "dev": true 145 | }, 146 | "cordova-android": { 147 | "version": "9.0.0", 148 | "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-9.0.0.tgz", 149 | "integrity": "sha512-2ZEgApK4LPMYW0zh/mLAH3CabzCaKE0yxQTzA2wTf0Eo2HHTJnRtDCf9spGf3nPOkubyXS6+pvzz5QzNHpVTqQ==", 150 | "dev": true, 151 | "requires": { 152 | "android-versions": "^1.5.0", 153 | "cordova-common": "^4.0.1", 154 | "execa": "^4.0.2", 155 | "fs-extra": "^9.0.1", 156 | "nopt": "^4.0.3", 157 | "properties-parser": "^0.3.1", 158 | "which": "^2.0.2" 159 | } 160 | }, 161 | "cordova-common": { 162 | "version": "4.0.2", 163 | "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-4.0.2.tgz", 164 | "integrity": "sha512-od7aNShyuBajzPY83mUEO8tERwwWdFklXETHiXP5Ft87CWeo/tSuwNPFztyTy8XYc74yXdogXKPTJeUHuVzB8Q==", 165 | "dev": true, 166 | "requires": { 167 | "@netflix/nerror": "^1.1.3", 168 | "ansi": "^0.3.1", 169 | "bplist-parser": "^0.2.0", 170 | "cross-spawn": "^7.0.1", 171 | "elementtree": "^0.1.7", 172 | "endent": "^1.4.1", 173 | "fast-glob": "^3.2.2", 174 | "fs-extra": "^9.0.0", 175 | "glob": "^7.1.6", 176 | "plist": "^3.0.1", 177 | "q": "^1.5.1", 178 | "read-chunk": "^3.2.0", 179 | "strip-bom": "^4.0.0", 180 | "underscore": "^1.9.2" 181 | } 182 | }, 183 | "cordova-ios": { 184 | "version": "6.1.1", 185 | "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.1.1.tgz", 186 | "integrity": "sha512-WHNvjVhkuwRpq95rISVXtcRyd6UGZapbmU+hO/CAn1c0AIT5WnO8mg2mOjv0WDNa0mt/V5P+N2Vig1UWwfxa5Q==", 187 | "dev": true, 188 | "requires": { 189 | "cordova-common": "^4.0.2", 190 | "fs-extra": "^9.0.0", 191 | "ios-sim": "^8.0.2", 192 | "nopt": "^4.0.3", 193 | "plist": "^3.0.1", 194 | "semver": "^7.3.2", 195 | "unorm": "^1.6.0", 196 | "which": "^2.0.2", 197 | "xcode": "^3.0.1", 198 | "xml-escape": "^1.1.0" 199 | } 200 | }, 201 | "cordova-plugin-ionic-webview": { 202 | "version": "5.0.0", 203 | "resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-5.0.0.tgz", 204 | "integrity": "sha512-Wq0kCanxubK/JroTW4Mp5soayScnRyiY1eCkbwiz1Dyt1xHOiOW/v+1miqtBHtnZhcXw25TulCKAVJzkNBdmyg==", 205 | "dev": true 206 | }, 207 | "cordova-plugin-whitelist": { 208 | "version": "1.3.4", 209 | "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.4.tgz", 210 | "integrity": "sha512-EYC5eQFVkoYXq39l7tYKE6lEjHJ04mvTmKXxGL7quHLdFPfJMNzru/UYpn92AOfpl3PQaZmou78C7EgmFOwFQQ==", 211 | "dev": true 212 | }, 213 | "cross-spawn": { 214 | "version": "7.0.3", 215 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 216 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 217 | "dev": true, 218 | "requires": { 219 | "path-key": "^3.1.0", 220 | "shebang-command": "^2.0.0", 221 | "which": "^2.0.1" 222 | } 223 | }, 224 | "dedent": { 225 | "version": "0.7.0", 226 | "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", 227 | "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", 228 | "dev": true 229 | }, 230 | "elementtree": { 231 | "version": "0.1.7", 232 | "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", 233 | "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=", 234 | "dev": true, 235 | "requires": { 236 | "sax": "1.1.4" 237 | } 238 | }, 239 | "end-of-stream": { 240 | "version": "1.4.4", 241 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 242 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 243 | "dev": true, 244 | "requires": { 245 | "once": "^1.4.0" 246 | } 247 | }, 248 | "endent": { 249 | "version": "1.4.1", 250 | "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz", 251 | "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==", 252 | "dev": true, 253 | "requires": { 254 | "dedent": "^0.7.0", 255 | "fast-json-parse": "^1.0.3", 256 | "objectorarray": "^1.0.4" 257 | } 258 | }, 259 | "execa": { 260 | "version": "4.1.0", 261 | "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", 262 | "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", 263 | "dev": true, 264 | "requires": { 265 | "cross-spawn": "^7.0.0", 266 | "get-stream": "^5.0.0", 267 | "human-signals": "^1.1.1", 268 | "is-stream": "^2.0.0", 269 | "merge-stream": "^2.0.0", 270 | "npm-run-path": "^4.0.0", 271 | "onetime": "^5.1.0", 272 | "signal-exit": "^3.0.2", 273 | "strip-final-newline": "^2.0.0" 274 | } 275 | }, 276 | "extsprintf": { 277 | "version": "1.4.0", 278 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.0.tgz", 279 | "integrity": "sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=", 280 | "dev": true 281 | }, 282 | "fast-glob": { 283 | "version": "3.2.5", 284 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", 285 | "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", 286 | "dev": true, 287 | "requires": { 288 | "@nodelib/fs.stat": "^2.0.2", 289 | "@nodelib/fs.walk": "^1.2.3", 290 | "glob-parent": "^5.1.0", 291 | "merge2": "^1.3.0", 292 | "micromatch": "^4.0.2", 293 | "picomatch": "^2.2.1" 294 | } 295 | }, 296 | "fast-json-parse": { 297 | "version": "1.0.3", 298 | "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", 299 | "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", 300 | "dev": true 301 | }, 302 | "fastq": { 303 | "version": "1.10.0", 304 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", 305 | "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", 306 | "dev": true, 307 | "requires": { 308 | "reusify": "^1.0.4" 309 | } 310 | }, 311 | "fill-range": { 312 | "version": "7.0.1", 313 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 314 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 315 | "dev": true, 316 | "requires": { 317 | "to-regex-range": "^5.0.1" 318 | } 319 | }, 320 | "fs-extra": { 321 | "version": "9.1.0", 322 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", 323 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", 324 | "dev": true, 325 | "requires": { 326 | "at-least-node": "^1.0.0", 327 | "graceful-fs": "^4.2.0", 328 | "jsonfile": "^6.0.1", 329 | "universalify": "^2.0.0" 330 | } 331 | }, 332 | "fs.realpath": { 333 | "version": "1.0.0", 334 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 335 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 336 | "dev": true 337 | }, 338 | "get-stream": { 339 | "version": "5.2.0", 340 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 341 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 342 | "dev": true, 343 | "requires": { 344 | "pump": "^3.0.0" 345 | } 346 | }, 347 | "glob": { 348 | "version": "7.1.6", 349 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 350 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 351 | "dev": true, 352 | "requires": { 353 | "fs.realpath": "^1.0.0", 354 | "inflight": "^1.0.4", 355 | "inherits": "2", 356 | "minimatch": "^3.0.4", 357 | "once": "^1.3.0", 358 | "path-is-absolute": "^1.0.0" 359 | } 360 | }, 361 | "glob-parent": { 362 | "version": "5.1.1", 363 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 364 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 365 | "dev": true, 366 | "requires": { 367 | "is-glob": "^4.0.1" 368 | } 369 | }, 370 | "graceful-fs": { 371 | "version": "4.2.4", 372 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 373 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 374 | "dev": true 375 | }, 376 | "human-signals": { 377 | "version": "1.1.1", 378 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", 379 | "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", 380 | "dev": true 381 | }, 382 | "inflight": { 383 | "version": "1.0.6", 384 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 385 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 386 | "dev": true, 387 | "requires": { 388 | "once": "^1.3.0", 389 | "wrappy": "1" 390 | } 391 | }, 392 | "inherits": { 393 | "version": "2.0.4", 394 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 395 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 396 | "dev": true 397 | }, 398 | "ios-sim": { 399 | "version": "8.0.2", 400 | "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-8.0.2.tgz", 401 | "integrity": "sha512-P7nEG771bfd+JoMRjnis1gpZOkjTUUxu+4Ek1Z+eoaEEoT9byllU9pxfQ8Df7hL3gSkIQxNwTSLhos2I8tWUQA==", 402 | "dev": true, 403 | "requires": { 404 | "bplist-parser": "^0.0.6", 405 | "nopt": "1.0.9", 406 | "plist": "^3.0.1", 407 | "simctl": "^2" 408 | }, 409 | "dependencies": { 410 | "bplist-parser": { 411 | "version": "0.0.6", 412 | "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz", 413 | "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk=", 414 | "dev": true 415 | }, 416 | "nopt": { 417 | "version": "1.0.9", 418 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz", 419 | "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=", 420 | "dev": true, 421 | "requires": { 422 | "abbrev": "1" 423 | } 424 | } 425 | } 426 | }, 427 | "is-extglob": { 428 | "version": "2.1.1", 429 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 430 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 431 | "dev": true 432 | }, 433 | "is-glob": { 434 | "version": "4.0.1", 435 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 436 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 437 | "dev": true, 438 | "requires": { 439 | "is-extglob": "^2.1.1" 440 | } 441 | }, 442 | "is-number": { 443 | "version": "7.0.0", 444 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 445 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 446 | "dev": true 447 | }, 448 | "is-stream": { 449 | "version": "2.0.0", 450 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", 451 | "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", 452 | "dev": true 453 | }, 454 | "isexe": { 455 | "version": "2.0.0", 456 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 457 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 458 | "dev": true 459 | }, 460 | "jsonfile": { 461 | "version": "6.1.0", 462 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 463 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 464 | "dev": true, 465 | "requires": { 466 | "graceful-fs": "^4.1.6", 467 | "universalify": "^2.0.0" 468 | } 469 | }, 470 | "lodash": { 471 | "version": "4.17.20", 472 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 473 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 474 | "dev": true 475 | }, 476 | "lru-cache": { 477 | "version": "6.0.0", 478 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 479 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 480 | "dev": true, 481 | "requires": { 482 | "yallist": "^4.0.0" 483 | } 484 | }, 485 | "merge-stream": { 486 | "version": "2.0.0", 487 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 488 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 489 | "dev": true 490 | }, 491 | "merge2": { 492 | "version": "1.4.1", 493 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 494 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 495 | "dev": true 496 | }, 497 | "micromatch": { 498 | "version": "4.0.2", 499 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 500 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 501 | "dev": true, 502 | "requires": { 503 | "braces": "^3.0.1", 504 | "picomatch": "^2.0.5" 505 | } 506 | }, 507 | "mimic-fn": { 508 | "version": "2.1.0", 509 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 510 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 511 | "dev": true 512 | }, 513 | "minimatch": { 514 | "version": "3.0.4", 515 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 516 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 517 | "dev": true, 518 | "requires": { 519 | "brace-expansion": "^1.1.7" 520 | } 521 | }, 522 | "nopt": { 523 | "version": "4.0.3", 524 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 525 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 526 | "dev": true, 527 | "requires": { 528 | "abbrev": "1", 529 | "osenv": "^0.1.4" 530 | } 531 | }, 532 | "npm-run-path": { 533 | "version": "4.0.1", 534 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 535 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 536 | "dev": true, 537 | "requires": { 538 | "path-key": "^3.0.0" 539 | } 540 | }, 541 | "objectorarray": { 542 | "version": "1.0.4", 543 | "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.4.tgz", 544 | "integrity": "sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w==", 545 | "dev": true 546 | }, 547 | "once": { 548 | "version": "1.4.0", 549 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 550 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 551 | "dev": true, 552 | "requires": { 553 | "wrappy": "1" 554 | } 555 | }, 556 | "onetime": { 557 | "version": "5.1.2", 558 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 559 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 560 | "dev": true, 561 | "requires": { 562 | "mimic-fn": "^2.1.0" 563 | } 564 | }, 565 | "os-homedir": { 566 | "version": "1.0.2", 567 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 568 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 569 | "dev": true 570 | }, 571 | "os-tmpdir": { 572 | "version": "1.0.2", 573 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 574 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 575 | "dev": true 576 | }, 577 | "osenv": { 578 | "version": "0.1.5", 579 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 580 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 581 | "dev": true, 582 | "requires": { 583 | "os-homedir": "^1.0.0", 584 | "os-tmpdir": "^1.0.0" 585 | } 586 | }, 587 | "p-finally": { 588 | "version": "1.0.0", 589 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 590 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 591 | "dev": true 592 | }, 593 | "p-try": { 594 | "version": "2.2.0", 595 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 596 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 597 | "dev": true 598 | }, 599 | "path-is-absolute": { 600 | "version": "1.0.1", 601 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 602 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 603 | "dev": true 604 | }, 605 | "path-key": { 606 | "version": "3.1.1", 607 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 608 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 609 | "dev": true 610 | }, 611 | "picomatch": { 612 | "version": "2.2.2", 613 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 614 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 615 | "dev": true 616 | }, 617 | "pify": { 618 | "version": "4.0.1", 619 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 620 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 621 | "dev": true 622 | }, 623 | "plist": { 624 | "version": "3.0.1", 625 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz", 626 | "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==", 627 | "dev": true, 628 | "requires": { 629 | "base64-js": "^1.2.3", 630 | "xmlbuilder": "^9.0.7", 631 | "xmldom": "0.1.x" 632 | } 633 | }, 634 | "properties-parser": { 635 | "version": "0.3.1", 636 | "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz", 637 | "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=", 638 | "dev": true, 639 | "requires": { 640 | "string.prototype.codepointat": "^0.2.0" 641 | } 642 | }, 643 | "pump": { 644 | "version": "3.0.0", 645 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 646 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 647 | "dev": true, 648 | "requires": { 649 | "end-of-stream": "^1.1.0", 650 | "once": "^1.3.1" 651 | } 652 | }, 653 | "q": { 654 | "version": "1.5.1", 655 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", 656 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", 657 | "dev": true 658 | }, 659 | "read-chunk": { 660 | "version": "3.2.0", 661 | "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz", 662 | "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==", 663 | "dev": true, 664 | "requires": { 665 | "pify": "^4.0.1", 666 | "with-open-file": "^0.1.6" 667 | } 668 | }, 669 | "reusify": { 670 | "version": "1.0.4", 671 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 672 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 673 | "dev": true 674 | }, 675 | "run-parallel": { 676 | "version": "1.1.10", 677 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", 678 | "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", 679 | "dev": true 680 | }, 681 | "sax": { 682 | "version": "1.1.4", 683 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", 684 | "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=", 685 | "dev": true 686 | }, 687 | "semver": { 688 | "version": "7.3.4", 689 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 690 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 691 | "dev": true, 692 | "requires": { 693 | "lru-cache": "^6.0.0" 694 | } 695 | }, 696 | "shebang-command": { 697 | "version": "2.0.0", 698 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 699 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 700 | "dev": true, 701 | "requires": { 702 | "shebang-regex": "^3.0.0" 703 | } 704 | }, 705 | "shebang-regex": { 706 | "version": "3.0.0", 707 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 708 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 709 | "dev": true 710 | }, 711 | "shelljs": { 712 | "version": "0.2.6", 713 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz", 714 | "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=", 715 | "dev": true 716 | }, 717 | "signal-exit": { 718 | "version": "3.0.3", 719 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 720 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 721 | "dev": true 722 | }, 723 | "simctl": { 724 | "version": "2.0.0", 725 | "resolved": "https://registry.npmjs.org/simctl/-/simctl-2.0.0.tgz", 726 | "integrity": "sha512-5rB7rN4N3b0z0nFdy9eczVssXqrv2aAgdVRksPVqVoiDtvXmfzNvebp3EMdId2sAUzXIflarQlx4P0hjVQEzKQ==", 727 | "dev": true, 728 | "requires": { 729 | "shelljs": "^0.2.6", 730 | "tail": "^0.4.0" 731 | } 732 | }, 733 | "simple-plist": { 734 | "version": "1.1.1", 735 | "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", 736 | "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", 737 | "dev": true, 738 | "requires": { 739 | "bplist-creator": "0.0.8", 740 | "bplist-parser": "0.2.0", 741 | "plist": "^3.0.1" 742 | } 743 | }, 744 | "stream-buffers": { 745 | "version": "2.2.0", 746 | "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", 747 | "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", 748 | "dev": true 749 | }, 750 | "string.prototype.codepointat": { 751 | "version": "0.2.1", 752 | "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz", 753 | "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==", 754 | "dev": true 755 | }, 756 | "strip-bom": { 757 | "version": "4.0.0", 758 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 759 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 760 | "dev": true 761 | }, 762 | "strip-final-newline": { 763 | "version": "2.0.0", 764 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 765 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 766 | "dev": true 767 | }, 768 | "tail": { 769 | "version": "0.4.0", 770 | "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz", 771 | "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI=", 772 | "dev": true 773 | }, 774 | "to-regex-range": { 775 | "version": "5.0.1", 776 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 777 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 778 | "dev": true, 779 | "requires": { 780 | "is-number": "^7.0.0" 781 | } 782 | }, 783 | "underscore": { 784 | "version": "1.12.0", 785 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz", 786 | "integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==", 787 | "dev": true 788 | }, 789 | "universalify": { 790 | "version": "2.0.0", 791 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 792 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 793 | "dev": true 794 | }, 795 | "unorm": { 796 | "version": "1.6.0", 797 | "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", 798 | "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", 799 | "dev": true 800 | }, 801 | "uuid": { 802 | "version": "7.0.3", 803 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", 804 | "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", 805 | "dev": true 806 | }, 807 | "which": { 808 | "version": "2.0.2", 809 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 810 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 811 | "dev": true, 812 | "requires": { 813 | "isexe": "^2.0.0" 814 | } 815 | }, 816 | "with-open-file": { 817 | "version": "0.1.7", 818 | "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", 819 | "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", 820 | "dev": true, 821 | "requires": { 822 | "p-finally": "^1.0.0", 823 | "p-try": "^2.1.0", 824 | "pify": "^4.0.1" 825 | } 826 | }, 827 | "wrappy": { 828 | "version": "1.0.2", 829 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 830 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 831 | "dev": true 832 | }, 833 | "xcode": { 834 | "version": "3.0.1", 835 | "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", 836 | "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", 837 | "dev": true, 838 | "requires": { 839 | "simple-plist": "^1.1.0", 840 | "uuid": "^7.0.3" 841 | } 842 | }, 843 | "xml-escape": { 844 | "version": "1.1.0", 845 | "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", 846 | "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=", 847 | "dev": true 848 | }, 849 | "xmlbuilder": { 850 | "version": "9.0.7", 851 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", 852 | "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", 853 | "dev": true 854 | }, 855 | "xmldom": { 856 | "version": "0.1.31", 857 | "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", 858 | "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==", 859 | "dev": true 860 | }, 861 | "yallist": { 862 | "version": "4.0.0", 863 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 864 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 865 | "dev": true 866 | } 867 | } 868 | } 869 | -------------------------------------------------------------------------------- /src-cordova/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.dannyconnell.qwitter", 3 | "displayName": "Qwitter", 4 | "version": "1.0.0", 5 | "description": "A sample Apache Cordova application that responds to the deviceready event.", 6 | "main": "index.js", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [ 11 | "ecosystem:cordova" 12 | ], 13 | "author": "Apache Cordova Team", 14 | "license": "Apache-2.0", 15 | "devDependencies": { 16 | "cordova-android": "^9.0.0", 17 | "cordova-ios": "^6.1.1", 18 | "cordova-plugin-ionic-webview": "^5.0.0", 19 | "cordova-plugin-whitelist": "^1.3.4" 20 | }, 21 | "cordova": { 22 | "plugins": { 23 | "cordova-plugin-whitelist": {}, 24 | "cordova-plugin-ionic-webview": {} 25 | }, 26 | "platforms": [ 27 | "ios", 28 | "android" 29 | ] 30 | } 31 | } -------------------------------------------------------------------------------- /src-electron/electron-flag.d.ts: -------------------------------------------------------------------------------- 1 | // THIS FEATURE-FLAG FILE IS AUTOGENERATED, 2 | // REMOVAL OR CHANGES WILL CAUSE RELATED TYPES TO STOP WORKING 3 | import "quasar/dist/types/feature-flag"; 4 | 5 | declare module "quasar/dist/types/feature-flag" { 6 | interface QuasarFeatureFlags { 7 | electron: true; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src-electron/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/src-electron/icons/icon.icns -------------------------------------------------------------------------------- /src-electron/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/src-electron/icons/icon.ico -------------------------------------------------------------------------------- /src-electron/icons/linux-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/src-electron/icons/linux-512x512.png -------------------------------------------------------------------------------- /src-electron/main-process/electron-main.dev.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file is used specifically and only for development. It installs 3 | * `electron-debug` & `vue-devtools`. There shouldn't be any need to 4 | * modify this file, but it can be used to extend your development 5 | * environment. 6 | */ 7 | 8 | import electronDebug from 'electron-debug' 9 | import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer' 10 | import { app, BrowserWindow } from 'electron' 11 | 12 | app.whenReady().then(() => { 13 | // allow for a small delay for mainWindow to be created 14 | setTimeout(() => { 15 | // Install `electron-debug` with `devtron` 16 | electronDebug({ showDevTools: false }) 17 | 18 | // Install vuejs devtools 19 | installExtension(VUEJS_DEVTOOLS) 20 | .then(name => { 21 | console.log(`Added Extension: ${name}`) 22 | // get main window 23 | const win = BrowserWindow.getFocusedWindow() 24 | if (win) { 25 | win.webContents.on('did-frame-finish-load', () => { 26 | win.webContents.once('devtools-opened', () => { 27 | win.webContents.focus() 28 | }) 29 | // open electron debug 30 | console.log('Opening dev tools') 31 | win.webContents.openDevTools() 32 | }) 33 | } 34 | }) 35 | .catch(err => { 36 | console.log('An error occurred: ', err) 37 | }) 38 | }, 250) 39 | }) 40 | 41 | import './electron-main' 42 | -------------------------------------------------------------------------------- /src-electron/main-process/electron-main.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow, nativeTheme } from 'electron' 2 | 3 | try { 4 | if (process.platform === 'win32' && nativeTheme.shouldUseDarkColors === true) { 5 | require('fs').unlinkSync(require('path').join(app.getPath('userData'), 'DevTools Extensions')) 6 | } 7 | } catch (_) { } 8 | 9 | /** 10 | * Set `__statics` path to static files in production; 11 | * The reason we are setting it here is that the path needs to be evaluated at runtime 12 | */ 13 | if (process.env.PROD) { 14 | global.__statics = __dirname 15 | } 16 | 17 | let mainWindow 18 | 19 | function createWindow () { 20 | /** 21 | * Initial window options 22 | */ 23 | mainWindow = new BrowserWindow({ 24 | width: 1024, 25 | minWidth: 1024, 26 | height: 600, 27 | useContentSize: true, 28 | webPreferences: { 29 | // Change from /quasar.conf.js > electron > nodeIntegration; 30 | // More info: https://quasar.dev/quasar-cli/developing-electron-apps/node-integration 31 | nodeIntegration: process.env.QUASAR_NODE_INTEGRATION, 32 | nodeIntegrationInWorker: process.env.QUASAR_NODE_INTEGRATION, 33 | 34 | // More info: /quasar-cli/developing-electron-apps/electron-preload-script 35 | // preload: path.resolve(__dirname, 'electron-preload.js') 36 | } 37 | }) 38 | 39 | mainWindow.loadURL(process.env.APP_URL) 40 | 41 | mainWindow.on('closed', () => { 42 | mainWindow = null 43 | }) 44 | } 45 | 46 | app.on('ready', createWindow) 47 | 48 | app.on('window-all-closed', () => { 49 | if (process.platform !== 'darwin') { 50 | app.quit() 51 | } 52 | }) 53 | 54 | app.on('activate', () => { 55 | if (mainWindow === null) { 56 | createWindow() 57 | } 58 | }) 59 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 11 | -------------------------------------------------------------------------------- /src/assets/quasar-logo-full.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 43 | 45 | 46 | 48 | image/svg+xml 49 | 51 | 52 | 53 | 54 | 55 | 60 | 63 | 66 | 69 | 75 | 79 | 83 | 87 | 91 | 95 | 99 | 103 | 104 | 105 | 106 | 107 | 113 | 118 | 126 | 133 | 142 | 151 | 160 | 169 | 178 | 187 | 188 | 189 | 190 | 191 | 192 | -------------------------------------------------------------------------------- /src/boot/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dannyconnell/qwitter/af8c2785caa7e8419f2cf21ec80d5c8330133a8f/src/boot/.gitkeep -------------------------------------------------------------------------------- /src/boot/firebase.js: -------------------------------------------------------------------------------- 1 | import firebase from "firebase/app" 2 | import "firebase/firestore" 3 | 4 | const firebaseConfig = { 5 | // YOUR CONFIG HERE 6 | } 7 | 8 | firebase.initializeApp(firebaseConfig) 9 | 10 | let db = firebase.firestore() 11 | 12 | export default db -------------------------------------------------------------------------------- /src/css/app.sass: -------------------------------------------------------------------------------- 1 | // app global css in Sass form 2 | -------------------------------------------------------------------------------- /src/css/quasar.variables.sass: -------------------------------------------------------------------------------- 1 | // Quasar Sass (& SCSS) Variables 2 | // -------------------------------------------------- 3 | // To customize the look and feel of this app, you can override 4 | // the Sass/SCSS variables found in Quasar's source Sass/SCSS files. 5 | 6 | // Check documentation for full list of Quasar variables 7 | 8 | // Your own variables (that are declared here) and Quasar's own 9 | // ones will be available out of the box in your .vue/.scss/.sass files 10 | 11 | // It's highly recommended to change the default colors 12 | // to match your app's branding. 13 | // Tip: Use the "Theme Builder" on Quasar's documentation website. 14 | 15 | $primary : #1da1f2 16 | $secondary : #26A69A 17 | $accent : #9C27B0 18 | 19 | $dark : #1D1D1D 20 | 21 | $positive : #21BA45 22 | $negative : #C10015 23 | $info : #31CCEC 24 | $warning : #F2C037 25 | -------------------------------------------------------------------------------- /src/index.template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | <%= productName %> 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /src/layouts/MainLayout.vue: -------------------------------------------------------------------------------- 1 | 125 | 126 | 136 | 137 | -------------------------------------------------------------------------------- /src/pages/Error404.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 30 | -------------------------------------------------------------------------------- /src/pages/PageAbout.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /src/pages/PageHome.vue: -------------------------------------------------------------------------------- 1 | 107 | 108 | 197 | 198 | 214 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | 4 | import routes from './routes' 5 | 6 | Vue.use(VueRouter) 7 | 8 | /* 9 | * If not building with SSR mode, you can 10 | * directly export the Router instantiation; 11 | * 12 | * The function below can be async too; either use 13 | * async/await or return a Promise which resolves 14 | * with the Router instance. 15 | */ 16 | 17 | export default function (/* { store, ssrContext } */) { 18 | const Router = new VueRouter({ 19 | scrollBehavior: () => ({ x: 0, y: 0 }), 20 | routes, 21 | 22 | // Leave these as they are and change in quasar.conf.js instead! 23 | // quasar.conf.js -> build -> vueRouterMode 24 | // quasar.conf.js -> build -> publicPath 25 | mode: process.env.VUE_ROUTER_MODE, 26 | base: process.env.VUE_ROUTER_BASE 27 | }) 28 | 29 | return Router 30 | } 31 | -------------------------------------------------------------------------------- /src/router/routes.js: -------------------------------------------------------------------------------- 1 | 2 | const routes = [ 3 | { 4 | path: '/', 5 | component: () => import('layouts/MainLayout.vue'), 6 | children: [ 7 | { 8 | path: '', 9 | component: () => import('pages/PageHome.vue'), 10 | name: 'Home' 11 | }, 12 | { 13 | path: '/about', 14 | component: () => import('pages/PageAbout.vue'), 15 | name: 'About' 16 | } 17 | ] 18 | }, 19 | 20 | // Always leave this as last one, 21 | // but you can also remove it 22 | { 23 | path: '*', 24 | component: () => import('pages/Error404.vue') 25 | } 26 | ] 27 | 28 | export default routes 29 | --------------------------------------------------------------------------------