Merge pull request #3729 from NoelDeMartin/MOBILE-4331
MOBILE-4331: Implement native plugin
This commit is contained in:
		
						commit
						a722e2cc53
					
				
							
								
								
									
										14
									
								
								.github/workflows/testing.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.github/workflows/testing.yml
									
									
									
									
										vendored
									
									
								
							| @ -13,7 +13,9 @@ jobs: | ||||
|       with: | ||||
|         node-version-file: '.nvmrc' | ||||
|     - name: Install npm packages | ||||
|       run: npm ci --no-audit | ||||
|       run: | | ||||
|         npm ci --no-audit | ||||
|         npm ci --no-audit --prefix cordova-plugin-moodleapp | ||||
|     - name: Check langindex | ||||
|       run: | | ||||
|         result=$(cat scripts/langindex.json | grep \"TBD\" | wc -l); test $result -eq 0 | ||||
| @ -46,11 +48,15 @@ jobs: | ||||
|           echo "Found $found missing langkeys" | ||||
|           exit 1 | ||||
|         fi | ||||
|     - name: Run Linter (ignore warnings) | ||||
|       run: npm run lint -- --quiet | ||||
|     - name: Run Linters (ignore warnings) | ||||
|       run: | | ||||
|         npm run lint -- --quiet | ||||
|         npm run lint --prefix cordova-plugin-moodleapp | ||||
|     - name: Run tests | ||||
|       run: npm run test:ci | ||||
|     - name: Production builds | ||||
|       run: npm run build:prod | ||||
|       run: | | ||||
|         npm run build:prod | ||||
|         npm run prod --prefix cordova-plugin-moodleapp | ||||
|     - name: JavaScript code compatibility | ||||
|       run: result=$(npx check-es-compat www/*.js 2> /dev/null | grep -v -E "Array\.prototype\.includes|Promise\.prototype\.finally|String\.prototype\.(matchAll|trimRight)|globalThis" | grep -Po "(?<=error).*?(?=\s+ecmascript)" | wc -l); test $result -eq 1 | ||||
|  | ||||
							
								
								
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Dockerfile
									
									
									
									
									
								
							| @ -3,8 +3,16 @@ FROM node:14 as build-stage | ||||
| 
 | ||||
| WORKDIR /app | ||||
| 
 | ||||
| # Prepare node dependencies | ||||
| # Update platform dependencies | ||||
| RUN apt-get update && apt-get install libsecret-1-0 -y | ||||
| 
 | ||||
| # Prepare native plugin | ||||
| COPY ./cordova-plugin-moodleapp/package*.json /app/cordova-plugin-moodleapp/ | ||||
| RUN npm ci --prefix cordova-plugin-moodleapp | ||||
| COPY ./cordova-plugin-moodleapp/ /app/cordova-plugin-moodleapp/ | ||||
| RUN npm run prod --prefix cordova-plugin-moodleapp | ||||
| 
 | ||||
| # Prepare node dependencies | ||||
| COPY package*.json ./ | ||||
| COPY patches ./patches | ||||
| RUN echo "unsafe-perm=true" > ./.npmrc | ||||
|  | ||||
							
								
								
									
										2
									
								
								cordova-plugin-moodleapp/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								cordova-plugin-moodleapp/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| node_modules | ||||
| www | ||||
							
								
								
									
										816
									
								
								cordova-plugin-moodleapp/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										816
									
								
								cordova-plugin-moodleapp/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,816 @@ | ||||
| { | ||||
|     "name": "cordova-plugin-moodleapp", | ||||
|     "version": "0.0.0", | ||||
|     "lockfileVersion": 1, | ||||
|     "requires": true, | ||||
|     "dependencies": { | ||||
|         "@babel/runtime": { | ||||
|             "version": "7.22.6", | ||||
|             "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", | ||||
|             "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "regenerator-runtime": "^0.13.11" | ||||
|             } | ||||
|         }, | ||||
|         "@esbuild/android-arm": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.11.tgz", | ||||
|             "integrity": "sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/android-arm64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.11.tgz", | ||||
|             "integrity": "sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/android-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/darwin-arm64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.11.tgz", | ||||
|             "integrity": "sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/darwin-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/freebsd-arm64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.11.tgz", | ||||
|             "integrity": "sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/freebsd-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-arm": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.11.tgz", | ||||
|             "integrity": "sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-arm64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.11.tgz", | ||||
|             "integrity": "sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-ia32": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.11.tgz", | ||||
|             "integrity": "sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-loong64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.11.tgz", | ||||
|             "integrity": "sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-mips64el": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.11.tgz", | ||||
|             "integrity": "sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-ppc64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.11.tgz", | ||||
|             "integrity": "sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-riscv64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.11.tgz", | ||||
|             "integrity": "sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-s390x": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.11.tgz", | ||||
|             "integrity": "sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/linux-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/netbsd-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/openbsd-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/sunos-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/win32-arm64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.11.tgz", | ||||
|             "integrity": "sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/win32-ia32": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.11.tgz", | ||||
|             "integrity": "sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "@esbuild/win32-x64": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz", | ||||
|             "integrity": "sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "ansi-regex": { | ||||
|             "version": "4.1.1", | ||||
|             "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", | ||||
|             "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "ansi-styles": { | ||||
|             "version": "3.2.1", | ||||
|             "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", | ||||
|             "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "color-convert": "^1.9.0" | ||||
|             } | ||||
|         }, | ||||
|         "anymatch": { | ||||
|             "version": "3.1.3", | ||||
|             "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", | ||||
|             "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "normalize-path": "^3.0.0", | ||||
|                 "picomatch": "^2.0.4" | ||||
|             } | ||||
|         }, | ||||
|         "binary-extensions": { | ||||
|             "version": "2.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", | ||||
|             "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "braces": { | ||||
|             "version": "3.0.2", | ||||
|             "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | ||||
|             "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "fill-range": "^7.0.1" | ||||
|             } | ||||
|         }, | ||||
|         "camelcase": { | ||||
|             "version": "5.3.1", | ||||
|             "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", | ||||
|             "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "chalk": { | ||||
|             "version": "4.1.2", | ||||
|             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", | ||||
|             "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "ansi-styles": "^4.1.0", | ||||
|                 "supports-color": "^7.1.0" | ||||
|             }, | ||||
|             "dependencies": { | ||||
|                 "ansi-styles": { | ||||
|                     "version": "4.3.0", | ||||
|                     "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", | ||||
|                     "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "color-convert": "^2.0.1" | ||||
|                     } | ||||
|                 }, | ||||
|                 "color-convert": { | ||||
|                     "version": "2.0.1", | ||||
|                     "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||||
|                     "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "color-name": "~1.1.4" | ||||
|                     } | ||||
|                 }, | ||||
|                 "color-name": { | ||||
|                     "version": "1.1.4", | ||||
|                     "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||||
|                     "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||||
|                     "dev": true | ||||
|                 }, | ||||
|                 "supports-color": { | ||||
|                     "version": "7.2.0", | ||||
|                     "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | ||||
|                     "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "has-flag": "^4.0.0" | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "chokidar": { | ||||
|             "version": "3.5.3", | ||||
|             "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|             "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "anymatch": "~3.1.2", | ||||
|                 "braces": "~3.0.2", | ||||
|                 "fsevents": "~2.3.2", | ||||
|                 "glob-parent": "~5.1.2", | ||||
|                 "is-binary-path": "~2.1.0", | ||||
|                 "is-glob": "~4.0.1", | ||||
|                 "normalize-path": "~3.0.0", | ||||
|                 "readdirp": "~3.6.0" | ||||
|             } | ||||
|         }, | ||||
|         "chokidar-cli": { | ||||
|             "version": "3.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-3.0.0.tgz", | ||||
|             "integrity": "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "chokidar": "^3.5.2", | ||||
|                 "lodash.debounce": "^4.0.8", | ||||
|                 "lodash.throttle": "^4.1.1", | ||||
|                 "yargs": "^13.3.0" | ||||
|             } | ||||
|         }, | ||||
|         "cliui": { | ||||
|             "version": "5.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", | ||||
|             "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "string-width": "^3.1.0", | ||||
|                 "strip-ansi": "^5.2.0", | ||||
|                 "wrap-ansi": "^5.1.0" | ||||
|             } | ||||
|         }, | ||||
|         "color-convert": { | ||||
|             "version": "1.9.3", | ||||
|             "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", | ||||
|             "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "color-name": "1.1.3" | ||||
|             } | ||||
|         }, | ||||
|         "color-name": { | ||||
|             "version": "1.1.3", | ||||
|             "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", | ||||
|             "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "concurrently": { | ||||
|             "version": "8.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", | ||||
|             "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "chalk": "^4.1.2", | ||||
|                 "date-fns": "^2.30.0", | ||||
|                 "lodash": "^4.17.21", | ||||
|                 "rxjs": "^7.8.1", | ||||
|                 "shell-quote": "^1.8.1", | ||||
|                 "spawn-command": "0.0.2", | ||||
|                 "supports-color": "^8.1.1", | ||||
|                 "tree-kill": "^1.2.2", | ||||
|                 "yargs": "^17.7.2" | ||||
|             }, | ||||
|             "dependencies": { | ||||
|                 "ansi-regex": { | ||||
|                     "version": "5.0.1", | ||||
|                     "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|                     "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|                     "dev": true | ||||
|                 }, | ||||
|                 "ansi-styles": { | ||||
|                     "version": "4.3.0", | ||||
|                     "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", | ||||
|                     "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "color-convert": "^2.0.1" | ||||
|                     } | ||||
|                 }, | ||||
|                 "cliui": { | ||||
|                     "version": "8.0.1", | ||||
|                     "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", | ||||
|                     "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "string-width": "^4.2.0", | ||||
|                         "strip-ansi": "^6.0.1", | ||||
|                         "wrap-ansi": "^7.0.0" | ||||
|                     } | ||||
|                 }, | ||||
|                 "color-convert": { | ||||
|                     "version": "2.0.1", | ||||
|                     "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | ||||
|                     "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "color-name": "~1.1.4" | ||||
|                     } | ||||
|                 }, | ||||
|                 "color-name": { | ||||
|                     "version": "1.1.4", | ||||
|                     "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | ||||
|                     "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | ||||
|                     "dev": true | ||||
|                 }, | ||||
|                 "emoji-regex": { | ||||
|                     "version": "8.0.0", | ||||
|                     "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | ||||
|                     "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", | ||||
|                     "dev": true | ||||
|                 }, | ||||
|                 "is-fullwidth-code-point": { | ||||
|                     "version": "3.0.0", | ||||
|                     "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", | ||||
|                     "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", | ||||
|                     "dev": true | ||||
|                 }, | ||||
|                 "string-width": { | ||||
|                     "version": "4.2.3", | ||||
|                     "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | ||||
|                     "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "emoji-regex": "^8.0.0", | ||||
|                         "is-fullwidth-code-point": "^3.0.0", | ||||
|                         "strip-ansi": "^6.0.1" | ||||
|                     } | ||||
|                 }, | ||||
|                 "strip-ansi": { | ||||
|                     "version": "6.0.1", | ||||
|                     "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|                     "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "ansi-regex": "^5.0.1" | ||||
|                     } | ||||
|                 }, | ||||
|                 "wrap-ansi": { | ||||
|                     "version": "7.0.0", | ||||
|                     "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", | ||||
|                     "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "ansi-styles": "^4.0.0", | ||||
|                         "string-width": "^4.1.0", | ||||
|                         "strip-ansi": "^6.0.0" | ||||
|                     } | ||||
|                 }, | ||||
|                 "y18n": { | ||||
|                     "version": "5.0.8", | ||||
|                     "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", | ||||
|                     "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", | ||||
|                     "dev": true | ||||
|                 }, | ||||
|                 "yargs": { | ||||
|                     "version": "17.7.2", | ||||
|                     "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", | ||||
|                     "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", | ||||
|                     "dev": true, | ||||
|                     "requires": { | ||||
|                         "cliui": "^8.0.1", | ||||
|                         "escalade": "^3.1.1", | ||||
|                         "get-caller-file": "^2.0.5", | ||||
|                         "require-directory": "^2.1.1", | ||||
|                         "string-width": "^4.2.3", | ||||
|                         "y18n": "^5.0.5", | ||||
|                         "yargs-parser": "^21.1.1" | ||||
|                     } | ||||
|                 }, | ||||
|                 "yargs-parser": { | ||||
|                     "version": "21.1.1", | ||||
|                     "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", | ||||
|                     "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", | ||||
|                     "dev": true | ||||
|                 } | ||||
|             } | ||||
|         }, | ||||
|         "date-fns": { | ||||
|             "version": "2.30.0", | ||||
|             "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", | ||||
|             "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "@babel/runtime": "^7.21.0" | ||||
|             } | ||||
|         }, | ||||
|         "decamelize": { | ||||
|             "version": "1.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", | ||||
|             "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "emoji-regex": { | ||||
|             "version": "7.0.3", | ||||
|             "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", | ||||
|             "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "esbuild": { | ||||
|             "version": "0.18.11", | ||||
|             "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", | ||||
|             "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "@esbuild/android-arm": "0.18.11", | ||||
|                 "@esbuild/android-arm64": "0.18.11", | ||||
|                 "@esbuild/android-x64": "0.18.11", | ||||
|                 "@esbuild/darwin-arm64": "0.18.11", | ||||
|                 "@esbuild/darwin-x64": "0.18.11", | ||||
|                 "@esbuild/freebsd-arm64": "0.18.11", | ||||
|                 "@esbuild/freebsd-x64": "0.18.11", | ||||
|                 "@esbuild/linux-arm": "0.18.11", | ||||
|                 "@esbuild/linux-arm64": "0.18.11", | ||||
|                 "@esbuild/linux-ia32": "0.18.11", | ||||
|                 "@esbuild/linux-loong64": "0.18.11", | ||||
|                 "@esbuild/linux-mips64el": "0.18.11", | ||||
|                 "@esbuild/linux-ppc64": "0.18.11", | ||||
|                 "@esbuild/linux-riscv64": "0.18.11", | ||||
|                 "@esbuild/linux-s390x": "0.18.11", | ||||
|                 "@esbuild/linux-x64": "0.18.11", | ||||
|                 "@esbuild/netbsd-x64": "0.18.11", | ||||
|                 "@esbuild/openbsd-x64": "0.18.11", | ||||
|                 "@esbuild/sunos-x64": "0.18.11", | ||||
|                 "@esbuild/win32-arm64": "0.18.11", | ||||
|                 "@esbuild/win32-ia32": "0.18.11", | ||||
|                 "@esbuild/win32-x64": "0.18.11" | ||||
|             } | ||||
|         }, | ||||
|         "escalade": { | ||||
|             "version": "3.1.1", | ||||
|             "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", | ||||
|             "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "fill-range": { | ||||
|             "version": "7.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | ||||
|             "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "to-regex-range": "^5.0.1" | ||||
|             } | ||||
|         }, | ||||
|         "find-up": { | ||||
|             "version": "3.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", | ||||
|             "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "locate-path": "^3.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "fsevents": { | ||||
|             "version": "2.3.2", | ||||
|             "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", | ||||
|             "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", | ||||
|             "dev": true, | ||||
|             "optional": true | ||||
|         }, | ||||
|         "get-caller-file": { | ||||
|             "version": "2.0.5", | ||||
|             "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", | ||||
|             "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "glob-parent": { | ||||
|             "version": "5.1.2", | ||||
|             "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", | ||||
|             "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "is-glob": "^4.0.1" | ||||
|             } | ||||
|         }, | ||||
|         "has-flag": { | ||||
|             "version": "4.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | ||||
|             "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "is-binary-path": { | ||||
|             "version": "2.1.0", | ||||
|             "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||||
|             "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "binary-extensions": "^2.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "is-extglob": { | ||||
|             "version": "2.1.1", | ||||
|             "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", | ||||
|             "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "is-fullwidth-code-point": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||||
|             "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "is-glob": { | ||||
|             "version": "4.0.3", | ||||
|             "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", | ||||
|             "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "is-extglob": "^2.1.1" | ||||
|             } | ||||
|         }, | ||||
|         "is-number": { | ||||
|             "version": "7.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | ||||
|             "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "locate-path": { | ||||
|             "version": "3.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", | ||||
|             "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "p-locate": "^3.0.0", | ||||
|                 "path-exists": "^3.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "lodash": { | ||||
|             "version": "4.17.21", | ||||
|             "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | ||||
|             "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "lodash.debounce": { | ||||
|             "version": "4.0.8", | ||||
|             "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", | ||||
|             "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "lodash.throttle": { | ||||
|             "version": "4.1.1", | ||||
|             "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", | ||||
|             "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "normalize-path": { | ||||
|             "version": "3.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||
|             "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "p-limit": { | ||||
|             "version": "2.3.0", | ||||
|             "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", | ||||
|             "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "p-try": "^2.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "p-locate": { | ||||
|             "version": "3.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", | ||||
|             "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "p-limit": "^2.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "p-try": { | ||||
|             "version": "2.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", | ||||
|             "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "path-exists": { | ||||
|             "version": "3.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", | ||||
|             "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "picomatch": { | ||||
|             "version": "2.3.1", | ||||
|             "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", | ||||
|             "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "readdirp": { | ||||
|             "version": "3.6.0", | ||||
|             "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", | ||||
|             "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "picomatch": "^2.2.1" | ||||
|             } | ||||
|         }, | ||||
|         "regenerator-runtime": { | ||||
|             "version": "0.13.11", | ||||
|             "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", | ||||
|             "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "require-directory": { | ||||
|             "version": "2.1.1", | ||||
|             "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", | ||||
|             "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "require-main-filename": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", | ||||
|             "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "rxjs": { | ||||
|             "version": "7.8.1", | ||||
|             "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", | ||||
|             "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "tslib": "^2.1.0" | ||||
|             } | ||||
|         }, | ||||
|         "set-blocking": { | ||||
|             "version": "2.0.0", | ||||
|             "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", | ||||
|             "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "shell-quote": { | ||||
|             "version": "1.8.1", | ||||
|             "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", | ||||
|             "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "spawn-command": { | ||||
|             "version": "0.0.2", | ||||
|             "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", | ||||
|             "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "string-width": { | ||||
|             "version": "3.1.0", | ||||
|             "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||||
|             "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "emoji-regex": "^7.0.1", | ||||
|                 "is-fullwidth-code-point": "^2.0.0", | ||||
|                 "strip-ansi": "^5.1.0" | ||||
|             } | ||||
|         }, | ||||
|         "strip-ansi": { | ||||
|             "version": "5.2.0", | ||||
|             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||||
|             "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "ansi-regex": "^4.1.0" | ||||
|             } | ||||
|         }, | ||||
|         "supports-color": { | ||||
|             "version": "8.1.1", | ||||
|             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", | ||||
|             "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "has-flag": "^4.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "to-regex-range": { | ||||
|             "version": "5.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | ||||
|             "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "is-number": "^7.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "tree-kill": { | ||||
|             "version": "1.2.2", | ||||
|             "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", | ||||
|             "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "tslib": { | ||||
|             "version": "2.6.0", | ||||
|             "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", | ||||
|             "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "typescript": { | ||||
|             "version": "5.1.6", | ||||
|             "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", | ||||
|             "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "which-module": { | ||||
|             "version": "2.0.1", | ||||
|             "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", | ||||
|             "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "wrap-ansi": { | ||||
|             "version": "5.1.0", | ||||
|             "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", | ||||
|             "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "ansi-styles": "^3.2.0", | ||||
|                 "string-width": "^3.0.0", | ||||
|                 "strip-ansi": "^5.0.0" | ||||
|             } | ||||
|         }, | ||||
|         "y18n": { | ||||
|             "version": "4.0.3", | ||||
|             "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", | ||||
|             "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", | ||||
|             "dev": true | ||||
|         }, | ||||
|         "yargs": { | ||||
|             "version": "13.3.2", | ||||
|             "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", | ||||
|             "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "cliui": "^5.0.0", | ||||
|                 "find-up": "^3.0.0", | ||||
|                 "get-caller-file": "^2.0.1", | ||||
|                 "require-directory": "^2.1.1", | ||||
|                 "require-main-filename": "^2.0.0", | ||||
|                 "set-blocking": "^2.0.0", | ||||
|                 "string-width": "^3.0.0", | ||||
|                 "which-module": "^2.0.0", | ||||
|                 "y18n": "^4.0.0", | ||||
|                 "yargs-parser": "^13.1.2" | ||||
|             } | ||||
|         }, | ||||
|         "yargs-parser": { | ||||
|             "version": "13.1.2", | ||||
|             "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", | ||||
|             "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", | ||||
|             "dev": true, | ||||
|             "requires": { | ||||
|                 "camelcase": "^5.0.0", | ||||
|                 "decamelize": "^1.2.0" | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								cordova-plugin-moodleapp/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								cordova-plugin-moodleapp/package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| { | ||||
|     "name": "cordova-plugin-moodleapp", | ||||
|     "private": true, | ||||
|     "types": "./types/index.d.ts", | ||||
|     "version": "0.0.0", | ||||
|     "scripts": { | ||||
|         "dev": "concurrently \"npm run dev:ts\" \"npm run dev:cordova\"", | ||||
|         "dev:ts": "scripts/build.js --watch", | ||||
|         "dev:cordova": "chokidar www/index.js -c scripts/copy-javascript.js", | ||||
|         "prod": "NODE_ENV=production scripts/build.js", | ||||
|         "lint": "tsc --noEmit" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "chokidar-cli": "^3.0.0", | ||||
|         "concurrently": "^8.2.0", | ||||
|         "esbuild": "^0.18.11", | ||||
|         "typescript": "^5.1.6" | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								cordova-plugin-moodleapp/plugin.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								cordova-plugin-moodleapp/plugin.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="cordova-plugin-moodleapp" version="0.0.0"> | ||||
|     <name>MoodleApp</name> | ||||
|     <description>Plugin with custom functionality for the Moodle App</description> | ||||
|     <js-module src="www/index.js" name="moodleapp"> | ||||
|         <clobbers target="cordova.MoodleApp" /> | ||||
|     </js-module> | ||||
|     <platform name="android"> | ||||
|         <config-file target="res/xml/config.xml" parent="/*"> | ||||
|             <feature name="SystemUI"> | ||||
|                 <param name="android-package" value="com.moodle.moodlemobile.SystemUI"/> | ||||
|             </feature> | ||||
|         </config-file> | ||||
|         <source-file src="src/android/SystemUI.java" target-dir="src/com/moodle/moodlemobile" /> | ||||
|     </platform> | ||||
| </plugin> | ||||
							
								
								
									
										54
									
								
								cordova-plugin-moodleapp/scripts/build.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										54
									
								
								cordova-plugin-moodleapp/scripts/build.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @ -0,0 +1,54 @@ | ||||
| #!/usr/bin/env node
 | ||||
| 
 | ||||
| // (C) Copyright 2015 Moodle Pty Ltd.
 | ||||
| //
 | ||||
| // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
| // you may not use this file except in compliance with the License.
 | ||||
| // You may obtain a copy of the License at
 | ||||
| //
 | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| //
 | ||||
| // Unless required by applicable law or agreed to in writing, software
 | ||||
| // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| const { readFileSync, writeFileSync } = require('fs'); | ||||
| const { resolve } = require('path'); | ||||
| 
 | ||||
| function fixBundle() { | ||||
|     const bundlePath = resolve(__dirname, '../www/index.js'); | ||||
|     const bundle = readFileSync(bundlePath).toString(); | ||||
| 
 | ||||
|     writeFileSync(bundlePath, bundle.replace('window.cordovaModule', 'module.exports')); | ||||
| } | ||||
| 
 | ||||
| const options = { | ||||
|     entryPoints: [resolve(__dirname, '../src/ts/index.ts')], | ||||
|     tsconfig: resolve(__dirname, '../tsconfig.json'), | ||||
|     outdir: resolve(__dirname, '../www'), | ||||
|     minify: process.env.NODE_ENV === 'production', | ||||
|     bundle: true, | ||||
|     plugins: [{ | ||||
|         name: 'moodleapp', | ||||
|         setup(build) { | ||||
|             build.onEnd(result => { | ||||
|                 if (result.errors.length > 0) { | ||||
|                     console.error('cordova-plugin-moodleapp build failed! ', result.errors); | ||||
| 
 | ||||
|                     return; | ||||
|                 } | ||||
| 
 | ||||
|                 fixBundle(); | ||||
|                 console.log('cordova-plugin-moodleapp built'); | ||||
|             }); | ||||
|         }, | ||||
|     }], | ||||
| }; | ||||
| 
 | ||||
| if (process.argv.includes('--watch')) { | ||||
|     require('esbuild').context(options).then(context => context.watch()); | ||||
| } else { | ||||
|     require('esbuild').build(options); | ||||
| } | ||||
							
								
								
									
										40
									
								
								cordova-plugin-moodleapp/scripts/copy-javascript.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								cordova-plugin-moodleapp/scripts/copy-javascript.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @ -0,0 +1,40 @@ | ||||
| #!/usr/bin/env node
 | ||||
| 
 | ||||
| // (C) Copyright 2015 Moodle Pty Ltd.
 | ||||
| //
 | ||||
| // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
| // you may not use this file except in compliance with the License.
 | ||||
| // You may obtain a copy of the License at
 | ||||
| //
 | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| //
 | ||||
| // Unless required by applicable law or agreed to in writing, software
 | ||||
| // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| // This script makes sure that javascript assets are kept up to date during development,
 | ||||
| // otherwise it would be necessary to reinstall the plugin every time anything changes.
 | ||||
| 
 | ||||
| const { readFileSync, writeFileSync, existsSync } = require('fs'); | ||||
| const { resolve } = require('path'); | ||||
| 
 | ||||
| const bundle = readFileSync(resolve(__dirname, '../www/index.js')).toString(); | ||||
| const template = readFileSync(resolve(__dirname, './templates/cordova-plugin.js')).toString(); | ||||
| const platformsPath = resolve(__dirname, '../../platforms/'); | ||||
| const filePaths = [ | ||||
|     resolve(platformsPath, 'android/app/src/main/assets/www/plugins/cordova-plugin-moodleapp/www/index.js'), | ||||
|     resolve(platformsPath, 'android/platform_www/plugins/cordova-plugin-moodleapp/www/index.js'), | ||||
| ]; | ||||
| const pluginIndex = template | ||||
|     .replace('[[PLUGIN_NAME]]', 'cordova-plugin-moodleapp.moodleapp') | ||||
|     .replace('[[PLUGIN_CONTENTS]]', bundle); | ||||
| 
 | ||||
| for (const filePath of filePaths) { | ||||
|     if (!existsSync(filePath)) { | ||||
|         continue; | ||||
|     } | ||||
| 
 | ||||
|     writeFileSync(filePath, pluginIndex); | ||||
| } | ||||
							
								
								
									
										3
									
								
								cordova-plugin-moodleapp/scripts/templates/cordova-plugin.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								cordova-plugin-moodleapp/scripts/templates/cordova-plugin.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| cordova.define("[[PLUGIN_NAME]]", function(require, exports, module) { | ||||
|     [[PLUGIN_CONTENTS]] | ||||
| }); | ||||
							
								
								
									
										85
									
								
								cordova-plugin-moodleapp/src/android/SystemUI.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								cordova-plugin-moodleapp/src/android/SystemUI.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,85 @@ | ||||
| // (C) Copyright 2015 Moodle Pty Ltd. | ||||
| // | ||||
| // Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| // you may not use this file except in compliance with the License. | ||||
| // You may obtain a copy of the License at | ||||
| // | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, software | ||||
| // distributed under the License is distributed on an "AS IS" BASIS, | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| // See the License for the specific language governing permissions and | ||||
| // limitations under the License. | ||||
| 
 | ||||
| package com.moodle.moodlemobile; | ||||
| 
 | ||||
| import android.graphics.Color; | ||||
| import android.os.Build; | ||||
| import android.util.Log; | ||||
| import android.view.Window; | ||||
| 
 | ||||
| import org.apache.cordova.CordovaPlugin; | ||||
| import org.apache.cordova.CallbackContext; | ||||
| 
 | ||||
| import org.json.JSONArray; | ||||
| 
 | ||||
| public class SystemUI extends CordovaPlugin { | ||||
| 
 | ||||
|     private static final String TAG = "SystemUI"; | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean execute(String action, JSONArray args, CallbackContext callbackContext) { | ||||
|         try { | ||||
|             switch (action) { | ||||
|                 case "setNavigationBarColor": | ||||
|                     this.setNavigationBarColor(args.getString(0)); | ||||
|                     callbackContext.success(); | ||||
| 
 | ||||
|                     return true; | ||||
|             } | ||||
|         } catch (Throwable e) { | ||||
|             Log.e(TAG, "Failed executing action: " + action, e); | ||||
|         } | ||||
| 
 | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     private void setNavigationBarColor(String color) { | ||||
|         if (Build.VERSION.SDK_INT < 21) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (color == null || color.isEmpty()) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         Log.d(TAG, "Setting navigation bar color to " + color); | ||||
| 
 | ||||
|         this.cordova.getActivity().runOnUiThread(new Runnable() { | ||||
|             @Override | ||||
|             public void run() { | ||||
|                 final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000; | ||||
|                 final int SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR = 0x00000010; | ||||
|                 final Window window = cordova.getActivity().getWindow(); | ||||
|                 int uiOptions = window.getDecorView().getSystemUiVisibility(); | ||||
| 
 | ||||
|                 uiOptions = uiOptions | FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; | ||||
|                 uiOptions = uiOptions & ~SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; | ||||
| 
 | ||||
|                 window.getDecorView().setSystemUiVisibility(uiOptions); | ||||
| 
 | ||||
|                 try { | ||||
|                     // Using reflection makes sure any 5.0+ device will work without having to compile with SDK level 21 | ||||
|                     window.getClass().getDeclaredMethod("setNavigationBarColor", int.class).invoke(window, Color.parseColor(color)); | ||||
|                 } catch (IllegalArgumentException ignore) { | ||||
|                     Log.e(TAG, "Invalid hexString argument, use f.i. '#999999'"); | ||||
|                 } catch (Exception ignore) { | ||||
|                     // this should not happen, only in case Android removes this method in a version > 21 | ||||
|                     Log.w(TAG, "Method window.setNavigationBarColor not found for SDK level " + Build.VERSION.SDK_INT); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										25
									
								
								cordova-plugin-moodleapp/src/ts/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								cordova-plugin-moodleapp/src/ts/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| // (C) Copyright 2015 Moodle Pty Ltd.
 | ||||
| //
 | ||||
| // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
| // you may not use this file except in compliance with the License.
 | ||||
| // You may obtain a copy of the License at
 | ||||
| //
 | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| //
 | ||||
| // Unless required by applicable law or agreed to in writing, software
 | ||||
| // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { SystemUI } from './plugins/SystemUI'; | ||||
| 
 | ||||
| const api: MoodleAppPlugins = { | ||||
|     systemUI: new SystemUI(), | ||||
| }; | ||||
| 
 | ||||
| // This is necessary to work around the default transpilation behavior,
 | ||||
| // which would wrap exported modules into UMD methods. Check out the
 | ||||
| // fixBundle method in the /scripts/build.js file for more details.
 | ||||
| // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | ||||
| (window as any).cordovaModule = api; | ||||
							
								
								
									
										31
									
								
								cordova-plugin-moodleapp/src/ts/plugins/SystemUI.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								cordova-plugin-moodleapp/src/ts/plugins/SystemUI.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | ||||
| // (C) Copyright 2015 Moodle Pty Ltd.
 | ||||
| //
 | ||||
| // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
| // you may not use this file except in compliance with the License.
 | ||||
| // You may obtain a copy of the License at
 | ||||
| //
 | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| //
 | ||||
| // Unless required by applicable law or agreed to in writing, software
 | ||||
| // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| /** | ||||
|  * Manages system UI settings. | ||||
|  */ | ||||
| export class SystemUI { | ||||
| 
 | ||||
|     /** | ||||
|      * Set navigation bar color. | ||||
|      * | ||||
|      * @param color Color. | ||||
|      */ | ||||
|     async setNavigationBarColor(color: string): Promise<void> { | ||||
|         await new Promise((resolve, reject) => { | ||||
|             cordova.exec(resolve, reject, 'SystemUI', 'setNavigationBarColor', [color]); | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										16
									
								
								cordova-plugin-moodleapp/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								cordova-plugin-moodleapp/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| { | ||||
|     "compilerOptions": { | ||||
|         "target": "esnext", | ||||
|         "module": "esnext", | ||||
|         "moduleResolution": "node", | ||||
|         "strict": true, | ||||
|         "esModuleInterop": true, | ||||
|         "skipLibCheck": true, | ||||
|         "experimentalDecorators": true, | ||||
|         "baseUrl": "./" | ||||
|     }, | ||||
|     "include": [ | ||||
|         "src/ts/**/*.ts", | ||||
|         "types/**.d.ts" | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										27
									
								
								cordova-plugin-moodleapp/types/index.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cordova-plugin-moodleapp/types/index.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| // (C) Copyright 2015 Moodle Pty Ltd.
 | ||||
| //
 | ||||
| // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
| // you may not use this file except in compliance with the License.
 | ||||
| // You may obtain a copy of the License at
 | ||||
| //
 | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| //
 | ||||
| // Unless required by applicable law or agreed to in writing, software
 | ||||
| // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { SystemUI } from '../src/ts/plugins/SystemUI'; | ||||
| 
 | ||||
| declare global { | ||||
| 
 | ||||
|     interface MoodleAppPlugins { | ||||
|         systemUI: SystemUI; | ||||
|     } | ||||
| 
 | ||||
|     interface Cordova { | ||||
|         MoodleApp: MoodleAppPlugins; // eslint-disable-line @typescript-eslint/naming-convention
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										245
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										245
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -8612,7 +8612,6 @@ | ||||
|       "version": "3.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", | ||||
|       "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "normalize-path": "^3.0.0", | ||||
|         "picomatch": "^2.0.4" | ||||
| @ -9796,8 +9795,7 @@ | ||||
|     "binary-extensions": { | ||||
|       "version": "2.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", | ||||
|       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" | ||||
|     }, | ||||
|     "bindings": { | ||||
|       "version": "1.5.0", | ||||
| @ -10960,7 +10958,6 @@ | ||||
|       "version": "3.5.3", | ||||
|       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", | ||||
|       "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "anymatch": "~3.1.2", | ||||
|         "braces": "~3.0.2", | ||||
| @ -10976,7 +10973,6 @@ | ||||
|           "version": "2.3.2", | ||||
|           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", | ||||
|           "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", | ||||
|           "dev": true, | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
| @ -11143,7 +11139,6 @@ | ||||
|       "version": "5.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", | ||||
|       "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "string-width": "^3.1.0", | ||||
|         "strip-ansi": "^5.2.0", | ||||
| @ -11153,14 +11148,12 @@ | ||||
|         "ansi-regex": { | ||||
|           "version": "4.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", | ||||
|           "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" | ||||
|         }, | ||||
|         "ansi-styles": { | ||||
|           "version": "3.2.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", | ||||
|           "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "color-convert": "^1.9.0" | ||||
|           } | ||||
| @ -11168,20 +11161,17 @@ | ||||
|         "emoji-regex": { | ||||
|           "version": "7.0.3", | ||||
|           "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", | ||||
|           "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" | ||||
|         }, | ||||
|         "is-fullwidth-code-point": { | ||||
|           "version": "2.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||||
|           "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" | ||||
|         }, | ||||
|         "string-width": { | ||||
|           "version": "3.1.0", | ||||
|           "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||||
|           "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "emoji-regex": "^7.0.1", | ||||
|             "is-fullwidth-code-point": "^2.0.0", | ||||
| @ -11192,7 +11182,6 @@ | ||||
|           "version": "5.2.0", | ||||
|           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||||
|           "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-regex": "^4.1.0" | ||||
|           } | ||||
| @ -11201,7 +11190,6 @@ | ||||
|           "version": "5.1.0", | ||||
|           "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", | ||||
|           "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-styles": "^3.2.0", | ||||
|             "string-width": "^3.0.0", | ||||
| @ -11537,6 +11525,140 @@ | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "concurrently": { | ||||
|       "version": "8.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", | ||||
|       "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "chalk": "^4.1.2", | ||||
|         "date-fns": "^2.30.0", | ||||
|         "lodash": "^4.17.21", | ||||
|         "rxjs": "^7.8.1", | ||||
|         "shell-quote": "^1.8.1", | ||||
|         "spawn-command": "0.0.2", | ||||
|         "supports-color": "^8.1.1", | ||||
|         "tree-kill": "^1.2.2", | ||||
|         "yargs": "^17.7.2" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "ansi-regex": { | ||||
|           "version": "5.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | ||||
|           "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "chalk": { | ||||
|           "version": "4.1.2", | ||||
|           "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", | ||||
|           "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-styles": "^4.1.0", | ||||
|             "supports-color": "^7.1.0" | ||||
|           }, | ||||
|           "dependencies": { | ||||
|             "supports-color": { | ||||
|               "version": "7.2.0", | ||||
|               "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | ||||
|               "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | ||||
|               "dev": true, | ||||
|               "requires": { | ||||
|                 "has-flag": "^4.0.0" | ||||
|               } | ||||
|             } | ||||
|           } | ||||
|         }, | ||||
|         "cliui": { | ||||
|           "version": "8.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", | ||||
|           "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "string-width": "^4.2.0", | ||||
|             "strip-ansi": "^6.0.1", | ||||
|             "wrap-ansi": "^7.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "is-fullwidth-code-point": { | ||||
|           "version": "3.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", | ||||
|           "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "rxjs": { | ||||
|           "version": "7.8.1", | ||||
|           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", | ||||
|           "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "tslib": "^2.1.0" | ||||
|           } | ||||
|         }, | ||||
|         "shell-quote": { | ||||
|           "version": "1.8.1", | ||||
|           "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", | ||||
|           "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "string-width": { | ||||
|           "version": "4.2.3", | ||||
|           "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | ||||
|           "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "emoji-regex": "^8.0.0", | ||||
|             "is-fullwidth-code-point": "^3.0.0", | ||||
|             "strip-ansi": "^6.0.1" | ||||
|           } | ||||
|         }, | ||||
|         "strip-ansi": { | ||||
|           "version": "6.0.1", | ||||
|           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | ||||
|           "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-regex": "^5.0.1" | ||||
|           } | ||||
|         }, | ||||
|         "supports-color": { | ||||
|           "version": "8.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", | ||||
|           "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "has-flag": "^4.0.0" | ||||
|           } | ||||
|         }, | ||||
|         "y18n": { | ||||
|           "version": "5.0.8", | ||||
|           "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", | ||||
|           "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", | ||||
|           "dev": true | ||||
|         }, | ||||
|         "yargs": { | ||||
|           "version": "17.7.2", | ||||
|           "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", | ||||
|           "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "cliui": "^8.0.1", | ||||
|             "escalade": "^3.1.1", | ||||
|             "get-caller-file": "^2.0.5", | ||||
|             "require-directory": "^2.1.1", | ||||
|             "string-width": "^4.2.3", | ||||
|             "y18n": "^5.0.5", | ||||
|             "yargs-parser": "^21.1.1" | ||||
|           } | ||||
|         }, | ||||
|         "yargs-parser": { | ||||
|           "version": "21.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", | ||||
|           "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", | ||||
|           "dev": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "conf": { | ||||
|       "version": "10.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", | ||||
| @ -12051,6 +12173,42 @@ | ||||
|       "resolved": "https://registry.npmjs.org/cordova-plugin-media-capture/-/cordova-plugin-media-capture-3.0.3.tgz", | ||||
|       "integrity": "sha512-pVQOrNM7VAuVUMXibAlMGIArrftHPrRs4dUCoE+e2HEFUp3LmN3Yj539LjdUxcWmz/A/cHC65m9E3DS56YJhcg==" | ||||
|     }, | ||||
|     "cordova-plugin-moodleapp": { | ||||
|       "version": "file:cordova-plugin-moodleapp", | ||||
|       "dependencies": { | ||||
|         "chokidar-cli": { | ||||
|           "version": "3.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-3.0.0.tgz", | ||||
|           "integrity": "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==", | ||||
|           "requires": { | ||||
|             "chokidar": "^3.5.2", | ||||
|             "lodash.debounce": "^4.0.8", | ||||
|             "yargs": "^13.3.0" | ||||
|           } | ||||
|         }, | ||||
|         "concurrently": { | ||||
|           "version": "8.2.0", | ||||
|           "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", | ||||
|           "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", | ||||
|           "requires": { | ||||
|             "date-fns": "^2.30.0", | ||||
|             "lodash": "^4.17.21", | ||||
|             "spawn-command": "0.0.2", | ||||
|             "tree-kill": "^1.2.2" | ||||
|           } | ||||
|         }, | ||||
|         "esbuild": { | ||||
|           "version": "0.18.11", | ||||
|           "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.11.tgz", | ||||
|           "integrity": "sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==" | ||||
|         }, | ||||
|         "typescript": { | ||||
|           "version": "5.1.6", | ||||
|           "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", | ||||
|           "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "cordova-plugin-network-information": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/cordova-plugin-network-information/-/cordova-plugin-network-information-3.0.0.tgz", | ||||
| @ -12871,6 +13029,14 @@ | ||||
|         "whatwg-url": "^8.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "date-fns": { | ||||
|       "version": "2.30.0", | ||||
|       "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", | ||||
|       "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", | ||||
|       "requires": { | ||||
|         "@babel/runtime": "^7.21.0" | ||||
|       } | ||||
|     }, | ||||
|     "debounce-fn": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", | ||||
| @ -12903,8 +13069,7 @@ | ||||
|     "decamelize": { | ||||
|       "version": "1.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", | ||||
|       "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" | ||||
|     }, | ||||
|     "decimal.js": { | ||||
|       "version": "10.4.3", | ||||
| @ -15847,8 +16012,7 @@ | ||||
|     "get-caller-file": { | ||||
|       "version": "2.0.5", | ||||
|       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", | ||||
|       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" | ||||
|     }, | ||||
|     "get-intrinsic": { | ||||
|       "version": "1.2.1", | ||||
| @ -17926,7 +18090,6 @@ | ||||
|       "version": "2.1.0", | ||||
|       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||||
|       "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "binary-extensions": "^2.0.0" | ||||
|       } | ||||
| @ -21540,8 +21703,7 @@ | ||||
|     "normalize-path": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||
|       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" | ||||
|     }, | ||||
|     "normalize-range": { | ||||
|       "version": "0.1.2", | ||||
| @ -24514,7 +24676,6 @@ | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", | ||||
|       "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "picomatch": "^2.2.1" | ||||
|       } | ||||
| @ -24869,8 +25030,7 @@ | ||||
|     "require-directory": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", | ||||
|       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" | ||||
|     }, | ||||
|     "require-from-string": { | ||||
|       "version": "2.0.2", | ||||
| @ -24880,8 +25040,7 @@ | ||||
|     "require-main-filename": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", | ||||
|       "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" | ||||
|     }, | ||||
|     "requires-port": { | ||||
|       "version": "1.0.0", | ||||
| @ -26409,6 +26568,11 @@ | ||||
|       "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", | ||||
|       "dev": true | ||||
|     }, | ||||
|     "spawn-command": { | ||||
|       "version": "0.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", | ||||
|       "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==" | ||||
|     }, | ||||
|     "spdx-correct": { | ||||
|       "version": "3.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", | ||||
| @ -27741,8 +27905,7 @@ | ||||
|     "tree-kill": { | ||||
|       "version": "1.2.2", | ||||
|       "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", | ||||
|       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" | ||||
|     }, | ||||
|     "ts-dedent": { | ||||
|       "version": "2.2.0", | ||||
| @ -29908,8 +30071,7 @@ | ||||
|     "which-module": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", | ||||
|       "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" | ||||
|     }, | ||||
|     "which-typed-array": { | ||||
|       "version": "1.1.9", | ||||
| @ -30218,8 +30380,7 @@ | ||||
|     "y18n": { | ||||
|       "version": "4.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", | ||||
|       "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", | ||||
|       "dev": true | ||||
|       "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" | ||||
|     }, | ||||
|     "yallist": { | ||||
|       "version": "4.0.0", | ||||
| @ -30236,7 +30397,6 @@ | ||||
|       "version": "13.3.2", | ||||
|       "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", | ||||
|       "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "cliui": "^5.0.0", | ||||
|         "find-up": "^3.0.0", | ||||
| @ -30253,26 +30413,22 @@ | ||||
|         "ansi-regex": { | ||||
|           "version": "4.1.1", | ||||
|           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", | ||||
|           "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" | ||||
|         }, | ||||
|         "emoji-regex": { | ||||
|           "version": "7.0.3", | ||||
|           "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", | ||||
|           "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" | ||||
|         }, | ||||
|         "is-fullwidth-code-point": { | ||||
|           "version": "2.0.0", | ||||
|           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||||
|           "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" | ||||
|         }, | ||||
|         "string-width": { | ||||
|           "version": "3.1.0", | ||||
|           "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||||
|           "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "emoji-regex": "^7.0.1", | ||||
|             "is-fullwidth-code-point": "^2.0.0", | ||||
| @ -30283,7 +30439,6 @@ | ||||
|           "version": "5.2.0", | ||||
|           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||||
|           "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||||
|           "dev": true, | ||||
|           "requires": { | ||||
|             "ansi-regex": "^4.1.0" | ||||
|           } | ||||
| @ -30294,7 +30449,6 @@ | ||||
|       "version": "13.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", | ||||
|       "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", | ||||
|       "dev": true, | ||||
|       "requires": { | ||||
|         "camelcase": "^5.0.0", | ||||
|         "decamelize": "^1.2.0" | ||||
| @ -30303,8 +30457,7 @@ | ||||
|         "camelcase": { | ||||
|           "version": "5.3.1", | ||||
|           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", | ||||
|           "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", | ||||
|           "dev": true | ||||
|           "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|  | ||||
							
								
								
									
										11
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								package.json
									
									
									
									
									
								
							| @ -24,9 +24,11 @@ | ||||
|     "build": "ionic build", | ||||
|     "build:prod": "NODE_ENV=production ionic build --prod", | ||||
|     "build:test": "NODE_ENV=testing ionic build --configuration=testing", | ||||
|     "dev:android": "ionic cordova run android --livereload --external --ssl", | ||||
|     "dev:android": "concurrently \"npm run dev:android:app\" \"npm run dev:android:cordova\"", | ||||
|     "dev:android:app": "ionic cordova run android --livereload --external --ssl", | ||||
|     "dev:android:cordova": "npm run dev --prefix cordova-plugin-moodleapp", | ||||
|     "dev:ios": "ionic cordova run ios", | ||||
|     "prod:android": "NODE_ENV=production ionic cordova run android --prod", | ||||
|     "prod:android": "npm run prod --prefix cordova-plugin-moodleapp && NODE_ENV=production ionic cordova run android --prod", | ||||
|     "prod:ios": "NODE_ENV=production ionic cordova run ios --prod", | ||||
|     "storybook": "start-storybook -p 6006", | ||||
|     "test": "NODE_ENV=testing gulp && jest --verbose", | ||||
| @ -107,6 +109,7 @@ | ||||
|     "cordova-plugin-geolocation": "^4.1.0", | ||||
|     "cordova-plugin-ionic-keyboard": "^2.2.0", | ||||
|     "cordova-plugin-media-capture": "3.0.3", | ||||
|     "cordova-plugin-moodleapp": "file:cordova-plugin-moodleapp", | ||||
|     "cordova-plugin-network-information": "^3.0.0", | ||||
|     "cordova-plugin-prevent-override": "^1.0.1", | ||||
|     "cordova-plugin-screen-orientation": "^3.0.2", | ||||
| @ -157,6 +160,7 @@ | ||||
|     "@typescript-eslint/parser": "^4.22.0", | ||||
|     "check-es-compat": "^1.1.1", | ||||
|     "compare-versions": "^4.1.4", | ||||
|     "concurrently": "^8.2.0", | ||||
|     "cross-env": "^7.0.3", | ||||
|     "eslint": "^7.25.0", | ||||
|     "eslint-config-prettier": "^8.3.0", | ||||
| @ -244,7 +248,8 @@ | ||||
|       "@moodlehq/cordova-plugin-file-transfer": {}, | ||||
|       "cordova-plugin-prevent-override": {}, | ||||
|       "cordova-plugin-androidx-adapter": {}, | ||||
|       "cordova-plugin-screen-orientation": {} | ||||
|       "cordova-plugin-screen-orientation": {}, | ||||
|       "cordova-plugin-moodleapp": {} | ||||
|     } | ||||
|   }, | ||||
|   "optionalDependencies": { | ||||
|  | ||||
							
								
								
									
										52
									
								
								src/core/features/native/services/native.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/core/features/native/services/native.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| // (C) Copyright 2015 Moodle Pty Ltd.
 | ||||
| //
 | ||||
| // Licensed under the Apache License, Version 2.0 (the "License");
 | ||||
| // you may not use this file except in compliance with the License.
 | ||||
| // You may obtain a copy of the License at
 | ||||
| //
 | ||||
| //     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| //
 | ||||
| // Unless required by applicable law or agreed to in writing, software
 | ||||
| // distributed under the License is distributed on an "AS IS" BASIS,
 | ||||
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | ||||
| // See the License for the specific language governing permissions and
 | ||||
| // limitations under the License.
 | ||||
| 
 | ||||
| import { Injectable } from '@angular/core'; | ||||
| import { makeSingleton } from '@singletons'; | ||||
| import { CorePlatform } from '@services/platform'; | ||||
| import { AsyncInstance, asyncInstance } from '@/core/utils/async-instance'; | ||||
| 
 | ||||
| /** | ||||
|  * Native plugin manager. | ||||
|  */ | ||||
| @Injectable({ providedIn: 'root' }) | ||||
| export class CoreNativeService { | ||||
| 
 | ||||
|     private plugins: Partial<Record<keyof MoodleAppPlugins, AsyncInstance<unknown>>> = {}; | ||||
| 
 | ||||
|     /** | ||||
|      * Get a native plugin instance. | ||||
|      * | ||||
|      * @param plugin Plugin name. | ||||
|      * @returns Plugin instance. | ||||
|      */ | ||||
|     plugin<Plugin extends keyof MoodleAppPlugins>(plugin: Plugin): AsyncInstance<MoodleAppPlugins[Plugin]> | null { | ||||
|         if (!CorePlatform.isAndroid()) { | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         if (!(plugin in this.plugins)) { | ||||
|             this.plugins[plugin] = asyncInstance(async () => { | ||||
|                 await CorePlatform.ready(); | ||||
| 
 | ||||
|                 return window.cordova?.MoodleApp?.[plugin]; | ||||
|             }); | ||||
|         } | ||||
| 
 | ||||
|         return this.plugins[plugin] as AsyncInstance<MoodleAppPlugins[Plugin]>; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| export const CoreNative = makeSingleton(CoreNativeService); | ||||
| @ -5,6 +5,7 @@ | ||||
|     "types": [ | ||||
|       "@moodlehq/cordova-plugin-file-transfer", | ||||
|       "@moodlehq/cordova-plugin-inappbrowser", | ||||
|       "cordova-plugin-moodleapp", | ||||
|       "cordova", | ||||
|       "dom-mediacapture-record", | ||||
|       "node", | ||||
|  | ||||
| @ -22,6 +22,7 @@ | ||||
|     "types": [ | ||||
|         "@moodlehq/cordova-plugin-file-transfer", | ||||
|         "@moodlehq/cordova-plugin-inappbrowser", | ||||
|         "cordova-plugin-moodleapp", | ||||
|         "cordova", | ||||
|         "dom-mediacapture-record", | ||||
|         "faker", | ||||
|  | ||||
| @ -8,6 +8,7 @@ | ||||
|     "types": [ | ||||
|       "@moodlehq/cordova-plugin-file-transfer", | ||||
|       "@moodlehq/cordova-plugin-inappbrowser", | ||||
|       "cordova-plugin-moodleapp", | ||||
|       "cordova", | ||||
|       "dom-mediacapture-record", | ||||
|       "faker", | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user