Compare commits

..
Author SHA1 Message Date
Theaninova 69868663cb feat: update to node 22 2024-06-03 13:16:16 +02:00
584 changed files with 22891 additions and 26175 deletions
+1 -2
View File
@@ -98,8 +98,7 @@ typings/
# ignore ide files # ignore ide files
.idea .idea
.vscode?* .vscode
!.vscode/launch.json
# ignore lib # ignore lib
lib lib
+23 -8
View File
@@ -21,7 +21,13 @@ include:
- local: /.gitlab/publishing.gitlab-ci.yml - local: /.gitlab/publishing.gitlab-ci.yml
variables: variables:
TURBO_CACHE_BYPASS: "--force --no-cache" TURBO_CACHE_BYPASS:
value: ''
options:
- '--force'
- '--no-cache'
- ''
description: Bypass turbo cache
default: default:
image: registry.gitlab.com/openstapps/openstapps/node-builder image: registry.gitlab.com/openstapps/openstapps/node-builder
@@ -30,7 +36,10 @@ default:
interruptible: true interruptible: true
before_script: before_script:
- corepack enable - corepack enable
- corepack prepare pnpm@latest-10 --activate - corepack prepare pnpm@latest-8 --activate
- echo TURBO_API=$TURBO_API >> .env.local
- echo TURBO_TOKEN=$TURBO_TOKEN >> .env.local
- echo TURBO_TEAM=$TURBO_TEAM >> .env.local
- pnpm config set store-dir .pnpm-store - pnpm config set store-dir .pnpm-store
cache: &pnpm_cache cache: &pnpm_cache
key: key:
@@ -54,13 +63,13 @@ build:
# - pnpm i --prefer-offline # - pnpm i --prefer-offline
# - pnpm build:full:skip || pnpm i -r --prefer-offline # - pnpm build:full:skip || pnpm i -r --prefer-offline
- pnpm install - pnpm install
# TODO: whats the benefit for CI? something doesn't work with git here... # TODO: whats the benifit for CI? something doesn't work with git here...
# "🦋 error Error: Failed to find where HEAD diverged from master. Does master exist?" # "🦋 error Error: Failed to find where HEAD diverged from master. Does master exist?"
# - pnpm changeset:status # - pnpm changeset:status
- pnpm build:full $TURBO_CACHE_BYPASS - pnpm build:full $TURBO_CACHE_BYPASS
- .gitlab/ci/enableGitlabReviewToolbar.sh frontend/app/www/browser/index.html "$CI_PROJECT_ID" "$CI_OPEN_MERGE_REQUESTS" - .gitlab/ci/enableGitlabReviewToolbar.sh frontend/app/www/index.html "$CI_PROJECT_ID" "$CI_OPEN_MERGE_REQUESTS"
- cp frontend/app/www/browser/index.html frontend/app/www/browser/200.html - cp frontend/app/www/index.html frontend/app/www/200.html
- pnpm dlx surge -p frontend/app/www/browser -d https://$CI_PROJECT_NAME-$DEPLOY_ID.surge.sh/ - pnpm dlx surge -p frontend/app/www -d https://$CI_PROJECT_NAME-$DEPLOY_ID.surge.sh/
cache: cache:
<<: *pnpm_cache <<: *pnpm_cache
policy: pull-push policy: pull-push
@@ -96,7 +105,13 @@ unit:
stage: test stage: test
needs: ['build'] needs: ['build']
script: script:
# - pnpm config set recursive-install false
# - pnpm i --prefer-offline
# - pnpm test:skip || pnpm i -r --prefer-offline
- pnpm install - pnpm install
- cd node_modules/.pnpm/re2*/node_modules/re2
- npm run install
- cd $CI_PROJECT_DIR
- pnpm test $TURBO_CACHE_BYPASS - pnpm test $TURBO_CACHE_BYPASS
coverage: '/Statements[^:]*\:[^:]*\s+([\d\.]+)%/' coverage: '/Statements[^:]*\:[^:]*\s+([\d\.]+)%/'
artifacts: artifacts:
@@ -120,6 +135,6 @@ audit:
script: script:
- pnpm audit --prod --audit-level critical - pnpm audit --prod --audit-level critical
rules: rules:
- if: $CI_COMMIT_BRANCH == 'main'
allow_failure: false
- !reference [.limit_pipelines, rules] - !reference [.limit_pipelines, rules]
# - if: $CI_COMMIT_BRANCH == 'main'
# allow_failure: false
+1 -1
View File
@@ -27,7 +27,7 @@ publish image:
- tags - tags
needs: ['deploy'] needs: ['deploy']
image: image:
name: gcr.io/kaniko-project/executor:v1.24.0-debug name: gcr.io/kaniko-project/executor:v1.12.1-debug
entrypoint: [""] entrypoint: [""]
script: script:
- > - >
-1
View File
@@ -27,7 +27,6 @@ const config = {
'bin', 'bin',
'files', 'files',
'engines', 'engines',
'packageManager',
'scripts', 'scripts',
'dependencies', 'dependencies',
'devDependencies', 'devDependencies',
+2 -2
View File
@@ -1,3 +1,3 @@
nodejs 22.16.0 nodejs 22.2.0
pnpm 10.12.3 pnpm 8.15.4
python 3.11.5 python 3.11.5
-23
View File
@@ -1,23 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome",
"request": "launch",
"type": "chrome",
"url": "http://localhost:8100",
"webRoot": "${workspaceFolder}/frontend/app/www"
},
{
"type":"node",
"request": "launch",
"name": "Run mocha for nodejs workspace",
"runtimeExecutable": "${fileDirname}/../node_modules/.bin/c8",
"cwd": "${fileDirname}/../",
"runtimeArgs": ["--config", "${workspaceFolder}/.c8rc.json", "${fileDirname}/../node_modules/.bin/mocha", "--exit", "--reporter", "spec"]
},
]
}
+2 -2
View File
@@ -9,8 +9,8 @@ integration:
- name: registry.gitlab.com/openstapps/openstapps/database:latest - name: registry.gitlab.com/openstapps/openstapps/database:latest
alias: elasticsearch alias: elasticsearch
script: script:
- pnpm install - pnpm --filter=@openstapps/backend install
- pnpm test:integration:backend --force --no-cache - pnpm test:integration:backend
artifacts: artifacts:
when: on_failure when: on_failure
paths: paths:
-74
View File
@@ -1,79 +1,5 @@
# @openstapps/backend # @openstapps/backend
## 4.0.5
### Patch Changes
- Updated dependencies [86004881]
- Updated dependencies [09ad903a]
- @openstapps/core-tools@4.0.5
- @openstapps/core@4.0.5
## 4.0.3
### Patch Changes
- 3a274a3a: Upgrade to Capacitor 7 and Anuglar 18
- @openstapps/core@4.0.2
- @openstapps/core-tools@4.0.2
- @openstapps/logger@4.0.2
## 4.0.2
### Patch Changes
- 6b06de40: Updated nodemailer dependency
- Updated dependencies [6b06de40]
- @openstapps/logger@4.0.2
- @openstapps/core@4.0.2
- @openstapps/core-tools@4.0.2
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
- @openstapps/core@4.0.0
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- Updated dependencies [c8e29020]
- @openstapps/core@4.0.0
- @openstapps/core-tools@4.0.0
- @openstapps/logger@4.0.0
## 3.3.2
### Patch Changes
- @openstapps/core@3.3.2
- @openstapps/core-tools@3.3.2
## 3.3.1
### Patch Changes
- 67ab1fd6: fix for geo.point mapping
## 3.3.0
### Minor Changes
- 688bc5f2: v3.3.0 changes
### Patch Changes
- Updated dependencies [688bc5f2]
- @openstapps/core@3.3.0
- @openstapps/core-tools@3.3.0
- @openstapps/logger@3.0.0
## 3.2.0 ## 3.2.0
### Minor Changes ### Minor Changes
+28 -1
View File
@@ -29,6 +29,19 @@ const menus = [
}, },
}, },
}, },
{
icon: 'local_library',
route: '/hebis-search',
title: 'library catalog',
translations: {
de: {
title: 'Bibliothekskatalog',
},
en: {
title: 'library catalog',
},
},
},
{ {
icon: 'inventory_2', icon: 'inventory_2',
route: '/catalog', route: '/catalog',
@@ -99,7 +112,7 @@ const menus = [
icon: 'school', icon: 'school',
items: [ items: [
{ {
icon: 'star', icon: 'grade',
route: '/favorites', route: '/favorites',
title: 'favorites', title: 'favorites',
translations: { translations: {
@@ -124,6 +137,20 @@ const menus = [
}, },
}, },
}, },
{
authProvider: 'paia',
icon: 'badge',
route: '/library-account',
title: 'library account',
translations: {
de: {
title: 'Bibliothekskonto',
},
en: {
title: 'library account',
},
},
},
{ {
icon: 'settings', icon: 'settings',
route: '/settings', route: '/settings',
@@ -5,7 +5,7 @@ const userGroupSetting = {
categories: ['profile'], categories: ['profile'],
defaultValue: 'students', defaultValue: 'students',
description: description:
'The user group the app is going to use primarily.' + 'The user group the app is going to be used.' +
'This settings for example is getting used for the predefined price category of mensa meals.', 'This settings for example is getting used for the predefined price category of mensa meals.',
inputType: SCSettingInputType.SingleChoice, inputType: SCSettingInputType.SingleChoice,
name: 'group', name: 'group',
@@ -25,7 +25,7 @@ const userGroupSetting = {
}, },
en: { en: {
description: description:
'The user group the app is going to use primarily.' + 'The user group the app is going to be used.' +
' This settings for example is getting used for the predefined price category of mensa meals.', ' This settings for example is getting used for the predefined price category of mensa meals.',
name: 'Group', name: 'Group',
values: ['students', 'employees', 'guests'], values: ['students', 'employees', 'guests'],
+29
View File
@@ -32,6 +32,25 @@ const config = {
userinfo: 'https://cas.rz.uni-frankfurt.de/cas/oauth2.0/profile', userinfo: 'https://cas.rz.uni-frankfurt.de/cas/oauth2.0/profile',
}, },
}, },
paia: {
client: {
clientId: '',
scopes: '',
url: 'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php',
},
endpoints: {
authorization:
'https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php',
endSession: 'https://ubffm.hds.hebis.de/Shibboleth.sso/Logout',
mapping: {
id: '$.email',
name: '$.name',
role: '$.type',
},
token: 'https://hds.hebis.de/paia/auth/login',
userinfo: 'https://hds.hebis.de/paia/core',
},
},
}, },
app: { app: {
...defaultApp, ...defaultApp,
@@ -41,6 +60,16 @@ const config = {
authProvider: 'default', authProvider: 'default',
url: 'https://his-self-service.rz.uni-frankfurt.de', url: 'https://his-self-service.rz.uni-frankfurt.de',
}, },
daia: {
url: 'https://daia.hebis.de/DAIA2/UB_Frankfurt',
},
hebisProxy: {
url: 'https://proxy.ub.uni-frankfurt.de/login?qurl=',
},
paia: {
authProvider: 'paia',
url: 'https://hds.hebis.de/paia/core',
},
/** TODO: idCards: { /** TODO: idCards: {
authProvider: 'default', authProvider: 'default',
url: 'TODO', url: 'TODO',
@@ -2,7 +2,7 @@
The Goethe-Uni App got even better! The Goethe-Uni App got even better!
## Completely new map view ## Completelty new map view
We overhauled the map to offer you a clearer and faster and overview. We overhauled the map to offer you a clearer and faster and overview.
+19 -19
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/backend", "name": "@openstapps/backend",
"description": "A reference implementation for a StApps backend", "description": "A reference implementation for a StApps backend",
"version": "4.0.5", "version": "3.2.0",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
@@ -43,33 +43,33 @@
"test:unit": "cross-env NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true STAPPS_LOG_LEVEL=0 mocha --exit" "test:unit": "cross-env NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true STAPPS_LOG_LEVEL=0 mocha --exit"
}, },
"dependencies": { "dependencies": {
"@elastic/elasticsearch": "8.14.1", "@elastic/elasticsearch": "8.4.0",
"@openstapps/core": "workspace:*", "@openstapps/core": "workspace:*",
"@openstapps/core-tools": "workspace:*", "@openstapps/core-tools": "workspace:*",
"@openstapps/logger": "workspace:*", "@openstapps/logger": "workspace:*",
"@types/body-parser": "1.19.6", "@types/body-parser": "1.19.2",
"@types/cors": "2.8.13", "@types/cors": "2.8.13",
"@types/express": "4.17.17", "@types/express": "4.17.17",
"@types/geojson": "1.0.6", "@types/geojson": "1.0.6",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"@types/node-cron": "3.0.7", "@types/node-cron": "3.0.7",
"@types/nodemailer": "8.0.2", "@types/nodemailer": "6.4.7",
"@types/promise-queue": "2.2.0", "@types/promise-queue": "2.2.0",
"@types/uuid": "8.3.4", "@types/uuid": "8.3.4",
"body-parser": "1.20.3", "body-parser": "1.20.2",
"cors": "2.8.5", "cors": "2.8.5",
"cosmiconfig": "8.1.3", "cosmiconfig": "8.1.3",
"deepmerge": "4.3.1", "deepmerge": "4.3.1",
"express": "4.21.2", "express": "4.18.2",
"express-prom-bundle": "6.6.0", "express-prom-bundle": "6.6.0",
"express-promise-router": "4.1.1", "express-promise-router": "4.1.1",
"got": "12.6.0", "got": "12.6.0",
"moment": "2.30.1", "moment": "2.30.1",
"morgan": "1.10.1", "morgan": "1.10.0",
"nock": "13.3.1", "nock": "13.3.1",
"node-cache": "5.1.2", "node-cache": "5.1.2",
"node-cron": "3.0.2", "node-cron": "3.0.2",
"nodemailer": "8.0.11", "nodemailer": "6.9.1",
"prom-client": "14.1.1", "prom-client": "14.1.1",
"promise-queue": "2.2.5", "promise-queue": "2.2.5",
"uuid": "8.3.2" "uuid": "8.3.2"
@@ -80,27 +80,27 @@
"@openstapps/prettier-config": "workspace:*", "@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@testdeck/mocha": "0.3.3", "@testdeck/mocha": "0.3.3",
"@types/chai": "4.3.20", "@types/chai": "4.3.5",
"@types/chai-as-promised": "7.1.8", "@types/chai-as-promised": "7.1.5",
"@types/mocha": "10.0.10", "@types/mocha": "10.0.1",
"@types/morgan": "1.9.10", "@types/morgan": "1.9.4",
"@types/sinon": "10.0.14", "@types/sinon": "10.0.14",
"@types/sinon-express-mock": "1.3.9", "@types/sinon-express-mock": "1.3.9",
"@types/supertest": "2.0.12", "@types/supertest": "2.0.12",
"c8": "10.1.3", "c8": "7.14.0",
"chai": "4.5.0", "chai": "4.3.7",
"chai-as-promised": "7.1.2", "chai-as-promised": "7.1.1",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"get-port": "5.1.1", "get-port": "5.1.1",
"mocha": "10.8.2", "mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0", "mocha-junit-reporter": "2.2.0",
"mocked-env": "1.3.5", "mocked-env": "1.3.5",
"sinon": "15.0.4", "sinon": "15.0.4",
"sinon-express-mock": "2.2.1", "sinon-express-mock": "2.2.1",
"supertest": "6.3.3", "supertest": "6.3.3",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tsup": "8.5.0", "tsup": "6.7.0",
"typescript": "5.9.3" "typescript": "5.4.2"
}, },
"tsup": { "tsup": {
"entry": [ "entry": [
@@ -15,7 +15,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {Logger, SMTP} from '@openstapps/logger'; import {Logger, SMTP} from '@openstapps/logger';
import {SendMailOptions} from 'nodemailer'; import {MailOptions} from 'nodemailer/lib/sendmail-transport';
import Queue from 'promise-queue'; import Queue from 'promise-queue';
/** /**
* A queue that can send mails in serial * A queue that can send mails in serial
@@ -36,7 +36,7 @@ export class MailQueue {
* the transport gets ready this mails are getting pushed in to * the transport gets ready this mails are getting pushed in to
* the normal queue. * the normal queue.
*/ */
dryQueue: SendMailOptions[]; dryQueue: MailOptions[];
/** /**
* A queue that saves mails, that are being sent in series * A queue that saves mails, that are being sent in series
@@ -68,7 +68,7 @@ export class MailQueue {
* Adds a mail into the queue so it gets send when the queue is ready * Adds a mail into the queue so it gets send when the queue is ready
* @param mail Information required for sending a mail * @param mail Information required for sending a mail
*/ */
private async addToQueue(mail: SendMailOptions) { private async addToQueue(mail: MailOptions) {
return this.queue.add<string>(() => this.transport.sendMail(mail)); return this.queue.add<string>(() => this.transport.sendMail(mail));
} }
@@ -99,7 +99,7 @@ export class MailQueue {
* Push a mail into the queue so it gets send when the queue is ready * Push a mail into the queue so it gets send when the queue is ready
* @param mail Information required for sending a mail * @param mail Information required for sending a mail
*/ */
public async push(mail: SendMailOptions) { public async push(mail: MailOptions) {
if (this.transport.isVerified()) { if (this.transport.isVerified()) {
await this.addToQueue(mail); await this.addToQueue(mail);
} else { } else {
@@ -25,7 +25,7 @@ export function buildDistanceFilter(
): QueryDslSpecificQueryContainer<'geo_distance'> { ): QueryDslSpecificQueryContainer<'geo_distance'> {
const geoObject: QueryDslGeoDistanceQuery = { const geoObject: QueryDslGeoDistanceQuery = {
distance: `${filter.arguments.distance}m`, distance: `${filter.arguments.distance}m`,
[`${filter.arguments.field}.point`]: { [`${filter.arguments.field}.point.coordinates`]: {
lat: filter.arguments.position[1], lat: filter.arguments.position[1],
lon: filter.arguments.position[0], lon: filter.arguments.position[0],
}, },
@@ -25,7 +25,7 @@ export function buildDistanceSort(sort: SCDistanceSort): SortOptions {
mode: 'avg', mode: 'avg',
order: sort.order, order: sort.order,
unit: 'm', unit: 'm',
[`${sort.arguments.field}.point`]: { [`${sort.arguments.field}.point.coordinates`]: {
lat: sort.arguments.position[1], lat: sort.arguments.position[1],
lon: sort.arguments.position[0], lon: sort.arguments.position[0],
}, },
@@ -19,7 +19,7 @@ import sinon from 'sinon';
import {MailQueue} from '../../src/notification/mail-queue.js'; import {MailQueue} from '../../src/notification/mail-queue.js';
import {expect} from 'chai'; import {expect} from 'chai';
import Queue from 'promise-queue'; import Queue from 'promise-queue';
import {SendMailOptions} from 'nodemailer'; import {MailOptions} from 'nodemailer/lib/sendmail-transport';
import {getTransport, TRANSPORT_SEND_RESPONSE} from '../common.js'; import {getTransport, TRANSPORT_SEND_RESPONSE} from '../common.js';
describe('MailQueue', async function () { describe('MailQueue', async function () {
@@ -54,7 +54,7 @@ describe('MailQueue', async function () {
const transport = getTransport(false); const transport = getTransport(false);
// @ts-expect-error not assignable // @ts-expect-error not assignable
const mailQueue = new MailQueue(transport); const mailQueue = new MailQueue(transport);
const mail: SendMailOptions = {from: 'Foo', subject: 'Foo Subject'}; const mail: MailOptions = {from: 'Foo', subject: 'Foo Subject'};
for (let i = 0; i < numberOfMails; i++) { for (let i = 0; i < numberOfMails; i++) {
await mailQueue.push(mail); await mailQueue.push(mail);
} }
@@ -70,7 +70,7 @@ describe('MailQueue', async function () {
const queueAddStub = sandbox.stub(Queue.prototype, 'add'); const queueAddStub = sandbox.stub(Queue.prototype, 'add');
// @ts-expect-error not assignable // @ts-expect-error not assignable
const mailQueue = new MailQueue(getTransport(false)); const mailQueue = new MailQueue(getTransport(false));
const mail: SendMailOptions = {}; const mail: MailOptions = {};
mailQueue.push(mail); mailQueue.push(mail);
expect(queueAddStub.called).to.be.false; expect(queueAddStub.called).to.be.false;
@@ -81,7 +81,7 @@ describe('MailQueue', async function () {
const transport = getTransport(false); const transport = getTransport(false);
// @ts-expect-error not assignable // @ts-expect-error not assignable
const mailQueue = new MailQueue(transport); const mailQueue = new MailQueue(transport);
const mail: SendMailOptions = {from: 'Foo', subject: 'Foo Subject'}; const mail: MailOptions = {from: 'Foo', subject: 'Foo Subject'};
// fake that transport is verified // fake that transport is verified
transport.isVerified = () => true; transport.isVerified = () => true;
mailQueue.push(mail); mailQueue.push(mail);
@@ -97,7 +97,7 @@ describe('MailQueue', async function () {
const transport = getTransport(false); const transport = getTransport(false);
// @ts-expect-error not assignable // @ts-expect-error not assignable
const mailQueue = new MailQueue(transport); const mailQueue = new MailQueue(transport);
const mail: SendMailOptions = {from: 'Foo', subject: 'Foo Subject'}; const mail: MailOptions = {from: 'Foo', subject: 'Foo Subject'};
// fake that transport is verified // fake that transport is verified
transport.isVerified = () => true; transport.isVerified = () => true;
await mailQueue.push(mail); await mailQueue.push(mail);
@@ -25,7 +25,7 @@ import {expect} from 'chai';
import {bulk, DEFAULT_TEST_TIMEOUT} from '../common.js'; import {bulk, DEFAULT_TEST_TIMEOUT} from '../common.js';
import {testApp} from '../tests-setup.js'; import {testApp} from '../tests-setup.js';
import {v4} from 'uuid'; import {v4} from 'uuid';
import bookFile from '@openstapps/core/test/resources/indexable/Book.2.json' with {type: 'json'}; import bookFile from '@openstapps/core/test/resources/indexable/Book.2.json' assert {type: 'json'};
const book = bookFile.instance as SCBook; const book = bookFile.instance as SCBook;
@@ -30,7 +30,7 @@ import chaiAsPromised from 'chai-as-promised';
import {DEFAULT_TEST_TIMEOUT} from '../common.js'; import {DEFAULT_TEST_TIMEOUT} from '../common.js';
import {testApp} from '../tests-setup.js'; import {testApp} from '../tests-setup.js';
import {backendConfig} from '../../src/config.js'; import {backendConfig} from '../../src/config.js';
import registerRequest from '@openstapps/core/test/resources/PluginRegisterRequest.1.json' with {type: 'json'}; import registerRequest from '@openstapps/core/test/resources/PluginRegisterRequest.1.json' assert {type: 'json'};
// for using promises in expectations (to.eventually.be...) // for using promises in expectations (to.eventually.be...)
use(chaiAsPromised); use(chaiAsPromised);
@@ -18,7 +18,7 @@ import chaiAsPromised from 'chai-as-promised';
import {bulkStorageMock, DEFAULT_TEST_TIMEOUT} from '../common.js'; import {bulkStorageMock, DEFAULT_TEST_TIMEOUT} from '../common.js';
import {expect, use} from 'chai'; import {expect, use} from 'chai';
import {testApp} from '../tests-setup.js'; import {testApp} from '../tests-setup.js';
import bookFile from '@openstapps/core/test/resources/indexable/Book.1.json' with {type: 'json'}; import bookFile from '@openstapps/core/test/resources/indexable/Book.1.json' assert {type: 'json'};
use(chaiAsPromised); use(chaiAsPromised);
@@ -49,8 +49,8 @@ import {
} from '../../../src/storage/elasticsearch/util/index.js'; } from '../../../src/storage/elasticsearch/util/index.js';
import cron from 'node-cron'; import cron from 'node-cron';
import {query} from './query.js'; import {query} from './query.js';
import messageFile from '@openstapps/core/test/resources/indexable/Message.1.json' with {type: 'json'}; import messageFile from '@openstapps/core/test/resources/indexable/Message.1.json' assert {type: 'json'};
import bookFile from '@openstapps/core/test/resources/indexable/Book.1.json' with {type: 'json'}; import bookFile from '@openstapps/core/test/resources/indexable/Book.1.json' assert {type: 'json'};
const message = messageFile.instance as SCMessage; const message = messageFile.instance as SCMessage;
const book = bookFile.instance as SCBook; const book = bookFile.instance as SCBook;
@@ -466,7 +466,7 @@ describe('Query', function () {
const expectedFilter: QueryDslSpecificQueryContainer<'geo_distance'> = { const expectedFilter: QueryDslSpecificQueryContainer<'geo_distance'> = {
geo_distance: { geo_distance: {
'distance': '1000m', 'distance': '1000m',
'geo.point': { 'geo.point.coordinates': {
lat: 8.123, lat: 8.123,
lon: 50.123, lon: 50.123,
}, },
@@ -636,7 +636,7 @@ describe('Query', function () {
'mode': 'avg', 'mode': 'avg',
'order': 'desc', 'order': 'desc',
'unit': 'm', 'unit': 'm',
'geo.point': { 'geo.point.coordinates': {
lat: 50.123, lat: 50.123,
lon: 8.123, lon: 8.123,
}, },
-12
View File
@@ -1,17 +1,5 @@
# @openstapps/database # @openstapps/database
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
## 3.2.0 ## 3.2.0
### Patch Changes ### Patch Changes
+1 -1
View File
@@ -1,4 +1,4 @@
FROM elasticsearch:8.14.3 FROM elasticsearch:8.4.2
EXPOSE 9200 EXPOSE 9200
EXPOSE 9300 EXPOSE 9300
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@openstapps/database", "name": "@openstapps/database",
"version": "4.0.1", "version": "3.2.0",
"private": true, "private": true,
"files": [ "files": [
"config", "config",
-24
View File
@@ -1,29 +1,5 @@
# @openstapps/proxy # @openstapps/proxy
## 4.0.5
### Patch Changes
- 8ccbfac0: Bumping proxy version to rebuild image
## 4.0.2
### Patch Changes
- Updated dependencies [6b06de40]
- @openstapps/logger@4.0.2
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- Updated dependencies [c8e29020]
- @openstapps/logger@4.0.0
## 3.0.0 ## 3.0.0
### Major Changes ### Major Changes
+10 -10
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/proxy", "name": "@openstapps/proxy",
"description": "NGINX proxy that is dynamically configured by a Node.js script", "description": "NGINX proxy that is dynamically configured by a Node.js script",
"version": "4.0.5", "version": "3.0.0",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
@@ -44,39 +44,39 @@
"@openstapps/logger": "workspace:*", "@openstapps/logger": "workspace:*",
"@types/config": "3.3.0", "@types/config": "3.3.0",
"@types/dockerode": "3.3.17", "@types/dockerode": "3.3.17",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"@types/sha1": "1.1.3", "@types/sha1": "1.1.3",
"config": "3.3.9", "config": "3.3.9",
"dockerode": "3.3.5", "dockerode": "3.3.5",
"is-cidr": "4.0.2", "is-cidr": "4.0.2",
"mustache": "4.2.0", "mustache": "4.2.0",
"semver": "7.6.0", "semver": "7.6.0",
"typescript": "5.9.3" "typescript": "5.4.2"
}, },
"devDependencies": { "devDependencies": {
"@openstapps/api-cli": "workspace:*", "@openstapps/api-cli": "workspace:*",
"@openstapps/eslint-config": "workspace:*", "@openstapps/eslint-config": "workspace:*",
"@openstapps/prettier-config": "workspace:*", "@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@types/chai": "4.3.20", "@types/chai": "4.3.5",
"@types/config": "3.3.0", "@types/config": "3.3.0",
"@types/dockerode": "3.3.17", "@types/dockerode": "3.3.17",
"@types/mocha": "10.0.10", "@types/mocha": "10.0.1",
"@types/mustache": "4.2.2", "@types/mustache": "4.2.2",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"@types/proxyquire": "1.3.28", "@types/proxyquire": "1.3.28",
"@types/semver": "7.5.8", "@types/semver": "7.5.8",
"@types/sha1": "1.1.3", "@types/sha1": "1.1.3",
"@types/sinon": "10.0.14", "@types/sinon": "10.0.14",
"@types/sinon-chai": "3.2.9", "@types/sinon-chai": "3.2.9",
"c8": "10.1.3", "c8": "7.14.0",
"chai": "4.5.0", "chai": "4.3.7",
"mocha": "10.8.2", "mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0", "mocha-junit-reporter": "2.2.0",
"sinon": "15.0.4", "sinon": "15.0.4",
"sinon-chai": "3.7.0", "sinon-chai": "3.7.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tsup": "8.5.0" "tsup": "6.7.0"
}, },
"tsup": { "tsup": {
"entry": [ "entry": [
+2 -14
View File
@@ -1,17 +1,5 @@
# @openstapps/backend-config # @openstapps/backend-config
## 4.0.3
### Patch Changes
- 3a274a3a: Upgrade to Capacitor 7 and Anuglar 18
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
## 3.0.0 ## 3.0.0
### Major Changes ### Major Changes
@@ -42,7 +30,7 @@
```js ```js
#!/usr/bin/env node #!/usr/bin/env node
import "./lib/app.js"; import './lib/app.js';
``` ```
- 64caebaf: Migrate to ESM - 64caebaf: Migrate to ESM
@@ -117,7 +105,7 @@
```js ```js
#!/usr/bin/env node #!/usr/bin/env node
import "./lib/app.js"; import './lib/app.js';
``` ```
- 64caebaf: Migrate to ESM - 64caebaf: Migrate to ESM
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/backend-config", "name": "@openstapps/backend-config",
"description": "Backend Configuration for OpenStApps", "description": "Backend Configuration for OpenStApps",
"version": "4.0.3", "version": "3.0.0",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
@@ -10,7 +10,7 @@
<group title="canteen" title.de="Mensa" icon="local_cafe" route="/canteen"/> <group title="canteen" title.de="Mensa" icon="local_cafe" route="/canteen"/>
<group title="campus map" title.de="Campus Karte" icon="map" route="/map"/> <group title="campus map" title.de="Campus Karte" icon="map" route="/map"/>
<group title="my app" title.de="Meine App" icon="school" route="/profile"> <group title="my app" title.de="Meine App" icon="school" route="/profile">
<item title="favorites" title.de="Favoriten" icon="star" route="/favorites"/> <item title="favorites" title.de="Favoriten" icon="grade" route="/favorites"/>
<item title="schedule" title.de="Stundenplan" icon="calendar_today" route="/schedule"/> <item title="schedule" title.de="Stundenplan" icon="calendar_today" route="/schedule"/>
<item title="library account" title.de="Bibliothekskonto" icon="badge" route="/library-account" authProvider="paia"/> <item title="library account" title.de="Bibliothekskonto" icon="badge" route="/library-account" authProvider="paia"/>
<item title="settings" title.de="Einstellungen" icon="settings" route="/settings"/> <item title="settings" title.de="Einstellungen" icon="settings" route="/settings"/>
+1 -1
View File
@@ -10,7 +10,7 @@
<group title="canteen" title.de="Mensa" icon="local_cafe" route="/canteen"/> <group title="canteen" title.de="Mensa" icon="local_cafe" route="/canteen"/>
<group title="campus map" title.de="Campus Karte" icon="map" route="/map"/> <group title="campus map" title.de="Campus Karte" icon="map" route="/map"/>
<group title="my app" title.de="Meine App" icon="school" route="/profile"> <group title="my app" title.de="Meine App" icon="school" route="/profile">
<item title="favorites" title.de="Favoriten" icon="star" route="/favorites"/> <item title="favorites" title.de="Favoriten" icon="grade" route="/favorites"/>
<item title="schedule" title.de="Stundenplan" icon="calendar_today" route="/schedule"/> <item title="schedule" title.de="Stundenplan" icon="calendar_today" route="/schedule"/>
<item title="library account" title.de="Bibliothekskonto" icon="badge" route="/library-account" authProvider="paia"/> <item title="library account" title.de="Bibliothekskonto" icon="badge" route="/library-account" authProvider="paia"/>
<item title="settings" title.de="Einstellungen" icon="settings" route="/settings"/> <item title="settings" title.de="Einstellungen" icon="settings" route="/settings"/>
+8 -26
View File
@@ -1,17 +1,5 @@
# @openstapps/eslint-config # @openstapps/eslint-config
## 4.0.3
### Patch Changes
- 3a274a3a: Upgrade to Capacitor 7 and Anuglar 18
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
## 3.0.0 ## 3.0.0
### Major Changes ### Major Changes
@@ -42,7 +30,7 @@
```js ```js
#!/usr/bin/env node #!/usr/bin/env node
import "./lib/app.js"; import './lib/app.js';
``` ```
- 64caebaf: Migrate to ESM - 64caebaf: Migrate to ESM
@@ -87,14 +75,11 @@
- 64caebaf: Migrated changelogs to changeset format - 64caebaf: Migrated changelogs to changeset format
```js ```js
import fs from "fs"; import fs from 'fs';
const path = "packages/logger/CHANGELOG.md"; const path = 'packages/logger/CHANGELOG.md';
fs.writeFileSync( fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
path,
fs.readFileSync(path, "utf8").replace(/^#+\s+\[/gm, "## ["),
);
``` ```
- 98546a97: Migrate away from @openstapps/configuration - 98546a97: Migrate away from @openstapps/configuration
@@ -137,7 +122,7 @@
```js ```js
#!/usr/bin/env node #!/usr/bin/env node
import "./lib/app.js"; import './lib/app.js';
``` ```
- 64caebaf: Migrate to ESM - 64caebaf: Migrate to ESM
@@ -182,14 +167,11 @@
- 64caebaf: Migrated changelogs to changeset format - 64caebaf: Migrated changelogs to changeset format
```js ```js
import fs from "fs"; import fs from 'fs';
const path = "packages/logger/CHANGELOG.md"; const path = 'packages/logger/CHANGELOG.md';
fs.writeFileSync( fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
path,
fs.readFileSync(path, "utf8").replace(/^#+\s+\[/gm, "## ["),
);
``` ```
- 98546a97: Migrate away from @openstapps/configuration - 98546a97: Migrate away from @openstapps/configuration
+3 -2
View File
@@ -22,7 +22,7 @@ const config = {
'plugin:unicorn/recommended', 'plugin:unicorn/recommended',
'prettier', 'prettier',
], ],
plugins: ['eslint-plugin-unicorn', 'eslint-plugin-jsdoc', '@stylistic/eslint-plugin'], plugins: ['eslint-plugin-unicorn', 'eslint-plugin-jsdoc'],
settings: { settings: {
jsdoc: { jsdoc: {
mode: 'typescript', mode: 'typescript',
@@ -76,7 +76,7 @@ const config = {
], ],
}, },
], ],
'@stylistic/lines-between-class-members': ['error', 'always'],
'@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-unused-vars': [ '@typescript-eslint/no-unused-vars': [
'error', 'error',
@@ -85,6 +85,7 @@ const config = {
argsIgnorePattern: '^_', argsIgnorePattern: '^_',
}, },
], ],
'@typescript-eslint/lines-between-class-members': ['error', 'always'],
'@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-non-null-assertion': 'off',
}, },
+5 -6
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/eslint-config", "name": "@openstapps/eslint-config",
"description": "A collection of configuration base files for StApps projects. Just an (unused) experiment for now.", "description": "A collection of configuration base files for StApps projects. Just an (unused) experiment for now.",
"version": "4.0.3", "version": "3.0.0",
"type": "commonjs", "type": "commonjs",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"repository": "git@gitlab.com:openstapps/eslint-config.git", "repository": "git@gitlab.com:openstapps/eslint-config.git",
@@ -17,14 +17,13 @@
], ],
"devDependencies": { "devDependencies": {
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"eslint": "8.57.0", "eslint": "8.57.0",
"typescript": "5.9.3" "typescript": "5.4.2"
}, },
"peerDependencies": { "peerDependencies": {
"@stylistic/eslint-plugin": "5.10.0", "@typescript-eslint/eslint-plugin": "7.2.0",
"@typescript-eslint/eslint-plugin": "8.39.1", "@typescript-eslint/parser": "7.2.0",
"@typescript-eslint/parser": "8.39.1",
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-config-prettier": "9.1.0", "eslint-config-prettier": "9.1.0",
"eslint-plugin-jsdoc": "48.2.1", "eslint-plugin-jsdoc": "48.2.1",
@@ -1,11 +1,5 @@
# @openstapps/prettier-config # @openstapps/prettier-config
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
## 3.2.0 ## 3.2.0
### Patch Changes ### Patch Changes
+2 -3
View File
@@ -9,8 +9,7 @@ const config = {
trailingComma: 'all', trailingComma: 'all',
bracketSpacing: false, bracketSpacing: false,
arrowParens: 'avoid', arrowParens: 'avoid',
endOfLine: 'lf', endOfLine: 'lf'
htmlWhitespaceSensitivity: 'strict'
} }
module.exports = config; export default config;
+2 -2
View File
@@ -1,8 +1,8 @@
{ {
"name": "@openstapps/prettier-config", "name": "@openstapps/prettier-config",
"description": "StApps Prettier Config", "description": "StApps Prettier Config",
"version": "4.0.0", "version": "3.2.0",
"type": "commonjs", "type": "module",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"repository": "git@gitlab.com:openstapps/prettier-config.git", "repository": "git@gitlab.com:openstapps/prettier-config.git",
"author": "Thea Schöbl <dev@theaninova.de>", "author": "Thea Schöbl <dev@theaninova.de>",
@@ -1,38 +1,5 @@
# @openstapps/projectmanagement # @openstapps/projectmanagement
## 4.0.5
### Patch Changes
- 86004881: Updated node-glob dependency
## 4.0.2
### Patch Changes
- Updated dependencies [6b06de40]
- @openstapps/logger@4.0.2
- @openstapps/gitlab-api@4.0.2
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- Updated dependencies [c8e29020]
- @openstapps/collection-utils@4.0.0
- @openstapps/gitlab-api@4.0.0
- @openstapps/logger@4.0.0
## 3.0.0 ## 3.0.0
### Major Changes ### Major Changes
+13 -12
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/projectmanagement", "name": "@openstapps/projectmanagement",
"description": "Main documentation and scripts for maintenance.", "description": "Main documentation and scripts for maintenance.",
"version": "4.0.5", "version": "3.0.0",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
@@ -41,30 +41,31 @@
"@openstapps/collection-utils": "workspace:*", "@openstapps/collection-utils": "workspace:*",
"@openstapps/gitlab-api": "workspace:*", "@openstapps/gitlab-api": "workspace:*",
"@openstapps/logger": "workspace:*", "@openstapps/logger": "workspace:*",
"@slack/web-api": "6.8.1",
"commander": "10.0.0", "commander": "10.0.0",
"date-fns": "3.6.0", "date-fns": "3.6.0",
"glob": "10.5.0", "glob": "10.3.10",
"mustache": "4.2.0" "mustache": "4.2.0"
}, },
"devDependencies": { "devDependencies": {
"@openstapps/eslint-config": "workspace:*", "@openstapps/eslint-config": "workspace:*",
"@openstapps/prettier-config": "workspace:*", "@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@types/chai": "4.3.20", "@types/chai": "4.3.5",
"@types/chai-as-promised": "7.1.8", "@types/chai-as-promised": "7.1.5",
"@types/glob": "8.1.0", "@types/glob": "8.1.0",
"@types/mocha": "10.0.10", "@types/mocha": "10.0.1",
"@types/mustache": "4.2.2", "@types/mustache": "4.2.2",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"@types/tmp": "0.2.3", "@types/tmp": "0.2.3",
"c8": "10.1.3", "c8": "7.14.0",
"chai": "4.5.0", "chai": "4.3.7",
"chai-as-promised": "7.1.2", "chai-as-promised": "7.1.1",
"mocha": "10.8.2", "mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0", "mocha-junit-reporter": "2.2.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tsup": "8.5.0", "tsup": "6.7.0",
"typescript": "5.9.3" "typescript": "5.4.2"
}, },
"tsup": { "tsup": {
"entry": [ "entry": [
@@ -22,6 +22,7 @@ import {
User, User,
} from '@openstapps/gitlab-api'; } from '@openstapps/gitlab-api';
import {Logger} from '@openstapps/logger'; import {Logger} from '@openstapps/logger';
import {WebClient} from '@slack/web-api';
import {CONCURRENCY, GROUPS, MAX_DEPTH_FOR_REMINDER, NOTE_PREFIX, SLACK_CHANNEL} from '../configuration.js'; import {CONCURRENCY, GROUPS, MAX_DEPTH_FOR_REMINDER, NOTE_PREFIX, SLACK_CHANNEL} from '../configuration.js';
import {mapAsyncLimit} from '@openstapps/collection-utils'; import {mapAsyncLimit} from '@openstapps/collection-utils';
@@ -52,7 +53,8 @@ export async function remind(api: Api): Promise<void> {
Logger.info(`Found ${mergeRequests.length} open merge requests.`); Logger.info(`Found ${mergeRequests.length} open merge requests.`);
// instantiate slack client // instantiate slack client
const client = undefined; const client =
process.env.SLACK_API_TOKEN === undefined ? undefined : new WebClient(process.env.SLACK_API_TOKEN);
// get members of the main group // get members of the main group
const members = await api.getMembers(MembershipScope.GROUPS, GROUPS[0]); const members = await api.getMembers(MembershipScope.GROUPS, GROUPS[0]);
+2 -14
View File
@@ -1,17 +1,5 @@
# @openstapps/tsconfig # @openstapps/tsconfig
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
## 3.3.0
### Minor Changes
- 688bc5f2: v3.3.0 changes
## 3.0.0 ## 3.0.0
### Major Changes ### Major Changes
@@ -42,7 +30,7 @@
```js ```js
#!/usr/bin/env node #!/usr/bin/env node
import "./lib/app.js"; import './lib/app.js';
``` ```
- 64caebaf: Migrate to ESM - 64caebaf: Migrate to ESM
@@ -117,7 +105,7 @@
```js ```js
#!/usr/bin/env node #!/usr/bin/env node
import "./lib/app.js"; import './lib/app.js';
``` ```
- 64caebaf: Migrate to ESM - 64caebaf: Migrate to ESM
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/tsconfig", "name": "@openstapps/tsconfig",
"description": "The tsconfig for the openstapps project", "description": "The tsconfig for the openstapps project",
"version": "4.0.0", "version": "3.0.0",
"type": "commonjs", "type": "commonjs",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"repository": "git@gitlab.com:openstapps/eslint-config.git", "repository": "git@gitlab.com:openstapps/eslint-config.git",
+1 -1
View File
@@ -9,7 +9,7 @@ const args = files.map(it => `${it.split('/', 2)[1]}='${it}'`);
console.log( console.log(
'Collecting coverage...', 'Collecting coverage...',
await promisify(exec)(`merge-cobertura -o ./coverage.xml ${args.join(' ')}`), await promisify(exec)(`cobertura-merge -o ./coverage.xml ${args.join(' ')}`),
); );
const reportFiles = await glob('./*/*/coverage/report-junit.xml'); const reportFiles = await glob('./*/*/coverage/report-junit.xml');
+2 -56
View File
@@ -1,66 +1,12 @@
# @openstapps/minimal-connector # @openstapps/minimal-connector
## 4.0.5
### Patch Changes
- Updated dependencies [09ad903a]
- @openstapps/core@4.0.5
- @openstapps/api@4.0.5
## 4.0.2
### Patch Changes
- Updated dependencies [6b06de40]
- @openstapps/logger@4.0.2
- @openstapps/core@4.0.2
- @openstapps/api@4.0.2
## 4.0.1
### Patch Changes
- Updated dependencies [b40ba7ad]
- @openstapps/api@4.0.1
- @openstapps/core@4.0.0
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- Updated dependencies [c8e29020]
- @openstapps/api@4.0.0
- @openstapps/core@4.0.0
- @openstapps/logger@4.0.0
## 3.3.2
### Patch Changes
- @openstapps/core@3.3.2
- @openstapps/api@3.3.2
## 3.3.0
### Patch Changes
- Updated dependencies [688bc5f2]
- @openstapps/api@3.3.0
- @openstapps/core@3.3.0
- @openstapps/logger@3.0.0
## 3.2.0 ## 3.2.0
### Patch Changes ### Patch Changes
- Updated dependencies [912ae422] - Updated dependencies [912ae422]
- @openstapps/core@3.2.0 - @openstapps/core@4.0.0
- @openstapps/api@3.2.0 - @openstapps/api@4.0.0
- @openstapps/logger@3.0.0 - @openstapps/logger@3.0.0
## 3.1.1 ## 3.1.1
+11 -11
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/minimal-connector", "name": "@openstapps/minimal-connector",
"description": "This is a minimal connector which serves as an example", "description": "This is a minimal connector which serves as an example",
"version": "4.0.5", "version": "3.2.0",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
@@ -42,20 +42,20 @@
"@openstapps/eslint-config": "workspace:*", "@openstapps/eslint-config": "workspace:*",
"@openstapps/prettier-config": "workspace:*", "@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@types/chai": "4.3.20", "@types/chai": "4.3.5",
"@types/chai-as-promised": "7.1.8", "@types/chai-as-promised": "7.1.5",
"@types/mocha": "10.0.10", "@types/mocha": "10.0.1",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"c8": "10.1.3", "c8": "7.14.0",
"chai": "4.5.0", "chai": "4.3.7",
"chai-as-promised": "7.1.2", "chai-as-promised": "7.1.1",
"conventional-changelog-cli": "2.2.2", "conventional-changelog-cli": "2.2.2",
"mocha": "10.8.2", "mocha": "10.2.0",
"mocha-junit-reporter": "2.2.0", "mocha-junit-reporter": "2.2.0",
"nock": "13.3.1", "nock": "13.3.1",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"tsup": "8.5.0", "tsup": "6.7.0",
"typescript": "5.9.3" "typescript": "5.4.2"
}, },
"tsup": { "tsup": {
"entry": [ "entry": [
-12
View File
@@ -1,17 +1,5 @@
# @openstapps/minimal-deployment # @openstapps/minimal-deployment
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
## 3.0.0 ## 3.0.0
### Patch Changes ### Patch Changes
@@ -1,10 +1,12 @@
version: '3.7'
x-development-variables: &development-variables x-development-variables: &development-variables
NODE_ENV: "development" NODE_ENV: "development"
ALLOW_NO_TRANSPORT: "true" ALLOW_NO_TRANSPORT: "true"
services: services:
database: database:
image: registry.gitlab.com/openstapps/openstapps/database:4.0.1 image: registry.gitlab.com/openstapps/openstapps/database:3.0.0
# If you need persistence for debugging purposes uncomment the following lines # If you need persistence for debugging purposes uncomment the following lines
#volumes: #volumes:
# - ./database:/usr/share/elasticsearch/data # - ./database:/usr/share/elasticsearch/data
@@ -13,9 +15,9 @@ services:
ports: ports:
- 127.0.0.1:9200:9200 - 127.0.0.1:9200:9200
environment: environment:
# - bootstrap.memory_lock=true - bootstrap.memory_lock=true
# - discovery.type=single-node - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- "ES_JAVA_OPTS=-Xms4g -Xmx4g" - discovery.type=single-node
ulimits: ulimits:
memlock: memlock:
soft: -1 soft: -1
@@ -23,7 +25,7 @@ services:
restart: unless-stopped restart: unless-stopped
backend: backend:
image: registry.gitlab.com/openstapps/openstapps/backend:4.0.1 image: registry.gitlab.com/openstapps/openstapps/backend:3.1.0
environment: environment:
<<: *development-variables <<: *development-variables
ES_ADDR: "http://database:9200" ES_ADDR: "http://database:9200"
@@ -35,11 +37,10 @@ services:
ports: ports:
- 127.0.0.1:3000:3000 - 127.0.0.1:3000:3000
labels: labels:
- stapps.version=4.0.0 - stapps.version=4.1.0
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
database: - database
condition: service_healthy
links: links:
- database - database
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@openstapps/minimal-deployment", "name": "@openstapps/minimal-deployment",
"version": "4.0.1", "version": "3.0.0",
"private": true, "private": true,
"files": [ "files": [
"database", "database",
+3 -70
View File
@@ -1,80 +1,13 @@
# @openstapps/minimal-plugin # @openstapps/minimal-plugin
## 4.0.5
### Patch Changes
- Updated dependencies [86004881]
- Updated dependencies [09ad903a]
- @openstapps/core-tools@4.0.5
- @openstapps/core@4.0.5
- @openstapps/api-plugin@4.0.5
- @openstapps/api@4.0.5
## 4.0.2
### Patch Changes
- Updated dependencies [6b06de40]
- @openstapps/logger@4.0.2
- @openstapps/api-plugin@4.0.2
- @openstapps/core@4.0.2
- @openstapps/core-tools@4.0.2
- @openstapps/api@4.0.2
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
- Updated dependencies [b40ba7ad]
- @openstapps/api-plugin@4.0.1
- @openstapps/api@4.0.1
- @openstapps/core@4.0.0
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- Updated dependencies [c8e29020]
- @openstapps/api@4.0.0
- @openstapps/api-plugin@4.0.0
- @openstapps/core@4.0.0
- @openstapps/core-tools@4.0.0
- @openstapps/logger@4.0.0
## 3.3.2
### Patch Changes
- @openstapps/core@3.3.2
- @openstapps/core-tools@3.3.2
- @openstapps/api-plugin@3.3.2
- @openstapps/api@3.3.2
## 3.3.0
### Patch Changes
- Updated dependencies [688bc5f2]
- @openstapps/api@3.3.0
- @openstapps/core@3.3.0
- @openstapps/api-plugin@3.3.0
- @openstapps/core-tools@3.3.0
- @openstapps/logger@3.0.0
## 3.2.0 ## 3.2.0
### Patch Changes ### Patch Changes
- Updated dependencies [912ae422] - Updated dependencies [912ae422]
- @openstapps/core@3.2.0 - @openstapps/core@4.0.0
- @openstapps/api@3.2.0 - @openstapps/api@4.0.0
- @openstapps/api-plugin@3.2.0 - @openstapps/api-plugin@4.0.0
- @openstapps/core-tools@3.0.0 - @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0 - @openstapps/logger@3.0.0
+5 -5
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/minimal-plugin", "name": "@openstapps/minimal-plugin",
"description": "Minimal Plugin", "description": "Minimal Plugin",
"version": "4.0.5", "version": "3.2.0",
"private": true, "private": true,
"type": "module", "type": "module",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
@@ -34,7 +34,7 @@
"@openstapps/core-tools": "workspace:*", "@openstapps/core-tools": "workspace:*",
"@openstapps/logger": "workspace:*", "@openstapps/logger": "workspace:*",
"commander": "10.0.0", "commander": "10.0.0",
"express": "4.21.2", "express": "4.18.2",
"ts-node": "10.9.2" "ts-node": "10.9.2"
}, },
"devDependencies": { "devDependencies": {
@@ -42,9 +42,9 @@
"@openstapps/prettier-config": "workspace:*", "@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@types/express": "4.17.17", "@types/express": "4.17.17",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"tsup": "8.5.0", "tsup": "6.7.0",
"typescript": "5.9.3" "typescript": "5.4.2"
}, },
"tsup": { "tsup": {
"entry": [ "entry": [
+9 -10
View File
@@ -11,7 +11,7 @@
flake-utils, flake-utils,
}: }:
let let
aapt2buildToolsVersion = "34.0.0"; aapt2buildToolsVersion = "33.0.2";
in in
flake-utils.lib.eachDefaultSystem ( flake-utils.lib.eachDefaultSystem (
system: system:
@@ -19,7 +19,7 @@
pkgs = import nixpkgs { pkgs = import nixpkgs {
inherit system; inherit system;
overlays = [ overlays = [
(final: prev: { (final: prev: rec {
fontMin = prev.python311.withPackages ( fontMin = prev.python311.withPackages (
ps: ps:
with ps; with ps;
@@ -30,17 +30,17 @@
++ (with fonttools.optional-dependencies; [ woff ]) ++ (with fonttools.optional-dependencies; [ woff ])
); );
android = prev.androidenv.composeAndroidPackages { android = prev.androidenv.composeAndroidPackages {
buildToolsVersions = prev.lib.lists.unique [ buildToolsVersions = [
"34.0.0" "30.0.3"
aapt2buildToolsVersion aapt2buildToolsVersion
]; ];
platformVersions = [ "34" ]; platformVersions = [ "33" ];
}; };
cypress = prev.cypress.overrideAttrs (cyPrev: rec { cypress = prev.cypress.overrideAttrs (cyPrev: rec {
version = "13.10.0"; version = "13.2.0";
src = prev.fetchzip { src = prev.fetchzip {
url = "https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip"; url = "https://cdn.cypress.io/desktop/${version}/linux-x64/cypress.zip";
hash = "sha256-wKNXo2lWndsQaouOiul0rsOWah+RRQ6fljzdeC8/KW4="; hash = "sha256-9o0nprGcJhudS1LNm+T7Vf0Dwd1RBauYKI+w1FBQ3ZM=";
}; };
}); });
nodejs = prev.nodejs_22; nodejs = prev.nodejs_22;
@@ -53,6 +53,7 @@
}; };
androidFhs = pkgs.buildFHSUserEnv { androidFhs = pkgs.buildFHSUserEnv {
name = "android-env"; name = "android-env";
targetPkgs = pkgs: with pkgs; [ ];
runScript = "bash"; runScript = "bash";
profile = '' profile = ''
export ALLOW_NINJA_ENV=true export ALLOW_NINJA_ENV=true
@@ -66,7 +67,7 @@
nativeBuildInputs = [ androidFhs ]; nativeBuildInputs = [ androidFhs ];
buildInputs = with pkgs; [ buildInputs = with pkgs; [
nodejs nodejs
nodePackages.pnpm corepack
# tools # tools
curl curl
jq jq
@@ -81,8 +82,6 @@
GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${aapt2buildToolsVersion}/aapt2"; GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${aapt2buildToolsVersion}/aapt2";
CYPRESS_INSTALL_BINARY = "0"; CYPRESS_INSTALL_BINARY = "0";
CYPRESS_RUN_BINARY = "${pkgs.cypress}/bin/Cypress"; CYPRESS_RUN_BINARY = "${pkgs.cypress}/bin/Cypress";
# https://github.com/nodejs/node/issues/48444#issuecomment-1591882694
UV_USE_IO_URING = "0";
}; };
} }
); );
+3 -4
View File
@@ -19,7 +19,7 @@
"plugin:unicorn/recommended", "plugin:unicorn/recommended",
"prettier" "prettier"
], ],
"plugins": ["eslint-plugin-unicorn", "eslint-plugin-jsdoc", "@stylistic/eslint-plugin"], "plugins": ["eslint-plugin-unicorn", "eslint-plugin-jsdoc"],
"settings": { "settings": {
"jsdoc": { "jsdoc": {
"mode": "typescript" "mode": "typescript"
@@ -63,10 +63,9 @@
"argsIgnorePattern": "^_" "argsIgnorePattern": "^_"
} }
], ],
"@stylistic/lines-between-class-members": ["error", "always"], "@typescript-eslint/lines-between-class-members": ["error", "always"],
"@typescript-eslint/no-explicit-any": "error", "@typescript-eslint/no-explicit-any": "error",
"@angular-eslint/use-lifecycle-interface": "error", "@angular-eslint/use-lifecycle-interface": "error"
"@angular-eslint/prefer-standalone": "off"
} }
}, },
{ {
+6 -3
View File
@@ -1,10 +1,13 @@
e2e: e2e:
image: registry.gitlab.com/openstapps/openstapps/app-cypress image: registry.gitlab.com/openstapps/openstapps/app-cypress:node-18
stage: test stage: test
script: script:
- pnpm install - pnpm --filter=@openstapps/app install
- pnpm --filter=@openstapps/app exec cypress install - pnpm --filter=@openstapps/app exec cypress install
- pnpm test:integration:app --force --no-cache - cd node_modules/.pnpm/re2*/node_modules/re2
- npm run install
- cd $CI_PROJECT_DIR
- pnpm test:integration:app
artifacts: artifacts:
when: on_failure when: on_failure
paths: paths:
-315
View File
@@ -1,98 +1,5 @@
# @openstapps/app # @openstapps/app
## 4.0.5
### Patch Changes
- 09ad903a: Upgrade to Capacitor 8 and Anuglar 20
- 86004881: Updated node-glob dependency
- Updated dependencies [09ad903a]
- @openstapps/core@4.0.5
- @openstapps/api@4.0.5
## 4.0.3
### Patch Changes
- 3a274a3a: Upgrade to Capacitor 7 and Anuglar 18
- @openstapps/api@4.0.2
- @openstapps/collection-utils@4.0.0
- @openstapps/core@4.0.2
## 4.0.2
### Patch Changes
- @openstapps/core@4.0.2
- @openstapps/api@4.0.2
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
- Updated dependencies [b40ba7ad]
- @openstapps/api@4.0.1
- @openstapps/core@4.0.0
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- b8ac30b9: Migrated IonIcons replacer to a custom component
- b8ac30b9: Migrated to Ionic standalone components
Angular ESBuild will not work with `IonicModule` apps
- b8ac30b9: Migrated to Angular ESBuild
- Updated dependencies [c8e29020]
- @openstapps/api@4.0.0
- @openstapps/collection-utils@4.0.0
- @openstapps/core@4.0.0
## 3.3.5
### Patch Changes
- 4c9d330c: fix user logout when token expires
## 3.3.4
### Minor Changes
- 8b581ef9: Use user facing changelogs in the about pages as the primary source, with the technical changes accessible through a sub menu.
## 3.3.3
### Patch Changes
- 496b50d8: Bug fixes and Android target sdk version is now 34
## 3.3.2
### Patch Changes
- 7afc24f1: fixed config version comparison
- @openstapps/core@3.3.2
- @openstapps/api@3.3.2
## 3.3.0
### Minor Changes
- 688bc5f2: v3.3.0 changes
### Patch Changes
- Updated dependencies [688bc5f2]
- @openstapps/api@3.2.0
- @openstapps/core@3.2.0
- @openstapps/collection-utils@3.0.0
## 3.2.0 ## 3.2.0
### Patch Changes ### Patch Changes
@@ -388,225 +295,3 @@
- Updated dependencies [64caebaf] - Updated dependencies [64caebaf]
- @openstapps/api@3.0.0-next.0 - @openstapps/api@3.0.0-next.0
- @openstapps/core@3.0.0-next.0 - @openstapps/core@3.0.0-next.0
## 2.1.1
### Bug Fixes
- autofocus searchbar only when no default data is displayed ([e90286f](https://gitlab.com/openstapps/app/commit/e90286fc6814f5c40af3e297be42f23128b991be))
- breadcrumbs are under parallax ([9e160e8](https://gitlab.com/openstapps/app/commit/9e160e8d1ee9409e4fbe518c9dd9748705e680e1))
- browser logout only if endSession url defined ([7f6de94](https://gitlab.com/openstapps/app/commit/7f6de94ab572be66d7f10758c37dcf10af46b4e0)), closes [#395](https://gitlab.com/openstapps/app/issues/395)
- can't select some list elements on safari 16.4 ([3e99d7f](https://gitlab.com/openstapps/app/commit/3e99d7fa8fcae4538e1afe6a017570b0cb6ff45e))
- canteen view removes item select listener on view exit ([05e996a](https://gitlab.com/openstapps/app/commit/05e996ae9052b11c23dc1093ef526f08e3e2e6b6))
- catalog module semester selection ([afbd1fc](https://gitlab.com/openstapps/app/commit/afbd1fc048997acbc0113f8957016f8947b58626))
- catalog semester selection ([a8c7d5a](https://gitlab.com/openstapps/app/commit/a8c7d5ab5934adf853cc40c1df311178df54057e))
- data detail local favorite fallback causing duplicate nested favorite view ([dff4a95](https://gitlab.com/openstapps/app/commit/dff4a95acc55574b4872b0e4e39555cce0b2fd60))
- data-detail favorite button color leaking to list items ([95f2da2](https://gitlab.com/openstapps/app/commit/95f2da2def39ec56f40a660a63e5f7fddb4b3d53))
- location flow on iOS devices ([f207e02](https://gitlab.com/openstapps/app/commit/f207e029f1b30624bf411a57b3c552ef259e13ed))
- parallax broken since safari 16.4 ([0f970fa](https://gitlab.com/openstapps/app/commit/0f970fa1f164a310e24a85140d8bf0da21e5a5f1))
- remove infinite scroll e2e test ([47565e5](https://gitlab.com/openstapps/app/commit/47565e51b0dda5c8227238b6dc19f0d277408429))
- replace breadcrumb popover with simply expanding the breadcrumbs ([1318cbc](https://gitlab.com/openstapps/app/commit/1318cbca7f0cf72e10d96fff1a1116ba073fe8dc))
- schedule tabs navigating to the wrong url ([abf2ab6](https://gitlab.com/openstapps/app/commit/abf2ab6a5a94941d439adf54ec677332823892db))
- translate simple pipe doesn't update on language changes ([f5ca150](https://gitlab.com/openstapps/app/commit/f5ca1508fb9d95693615bfb9e03bc127bd83be00))
- typo in catalog provider query ([f49c44f](https://gitlab.com/openstapps/app/commit/f49c44f5c53780e4794dc1ef4cbacfb20cabbd97))
- workaround for side menu items not being active on page load ([947cab4](https://gitlab.com/openstapps/app/commit/947cab458ca770f116d28a1f22687ae620e71b59))
### Features
- add content to empty catalogs ([982fb16](https://gitlab.com/openstapps/app/commit/982fb1653b3c1253aac9366733f14c22c94d2537))
- add easy way to configure search filtering for nested properties ([2220ab2](https://gitlab.com/openstapps/app/commit/2220ab24b385188515da7c176bf9c1ac72651fd9))
- dark theme ([e75a466](https://gitlab.com/openstapps/app/commit/e75a46633ca3685d6044eb9a8b2fd670f2cd030f))
- dashboard search rework ([8c30a47](https://gitlab.com/openstapps/app/commit/8c30a47706f07eb222fac47ad7fed61f9044328a))
- implement custom cdk virtual scroll behavior ([968cb72](https://gitlab.com/openstapps/app/commit/968cb729575c529fd6d1d35da1b50a8689057c46))
- optional logout from identity provider ([8cd2d77](https://gitlab.com/openstapps/app/commit/8cd2d777ab3a67b1ab24f03aa50a3ff73550c3d2)), closes [#372](https://gitlab.com/openstapps/app/issues/372)
- revamp dashboard mensa section ([33a74d9](https://gitlab.com/openstapps/app/commit/33a74d96ae92137f53a775e90bff99e5f2d41f6a))
- rework settings page design ([2f1298c](https://gitlab.com/openstapps/app/commit/2f1298c9d7df25d2a16576245ea62c1b6094e507))
- show in-place in date series modal, resolves [#385](https://gitlab.com/openstapps/app/issues/385) ([22e70ae](https://gitlab.com/openstapps/app/commit/22e70ae92b35578b559e6644dccb8d4bfd06af1e)), closes [#386](https://gitlab.com/openstapps/app/issues/386) [#388](https://gitlab.com/openstapps/app/issues/388)
- transition to full sidebar at xl instead of lg ([cc939f3](https://gitlab.com/openstapps/app/commit/cc939f38873833b7cc0260525a2ecd536f27bfa5))
## 2.0.1
### Bug Fixes
- assessment segments can become unreadable ([939fb6e](https://gitlab.com/openstapps/app/commit/939fb6ef0f11b40cb71fbe61da90f50b1f75c3f7))
- login button not easily found ([11d1ac3](https://gitlab.com/openstapps/app/commit/11d1ac3f7ce27c2822ea8f839df3f3dffbd6c020))
- remove misleading assessment calculations ([aefae33](https://gitlab.com/openstapps/app/commit/aefae33d5c9fa9ee3efe346e45429aca79ae3c48))
- right-align add event detail chip ([1eee652](https://gitlab.com/openstapps/app/commit/1eee652533c6b8f613ce09df9c3421f89209419a))
### Features
- offline notice ([9b4caf5](https://gitlab.com/openstapps/app/commit/9b4caf526ffb53ec8d8885342323fcc52fd9fc09))
- separate prettier from eslint ([a88d000](https://gitlab.com/openstapps/app/commit/a88d000ccd6cbdeb5fbb07d209f2491023f9d76c))
# 2.0.0
### Bug Fixes
- daia_url missing in environment configs ([863a3ff](https://gitlab.com/openstapps/app/commit/863a3ffd488425e3313ab9b812c4b6d50c68a244))
- 404 on all surge links ([f1b4930](https://gitlab.com/openstapps/app/commit/f1b4930a3068e73aee20b4c3d71dac551ab60c35))
- add areaServed to person detail ([488150f](https://gitlab.com/openstapps/app/commit/488150f7f5558c05c1ec8a71afcb9f9a37e68a37))
- add event popover expanding beyond screen width ([046a95b](https://gitlab.com/openstapps/app/commit/046a95ba1dca3f5ded7e5555d3167f52f95be107))
- add location info to dates from timetable ([92adb9d](https://gitlab.com/openstapps/app/commit/92adb9dd2db18027dcc327433027e28c81ecbd4b)), closes [#344](https://gitlab.com/openstapps/app/issues/344)
- add missing profile translation ([cdb6ac4](https://gitlab.com/openstapps/app/commit/cdb6ac4084f8704d7f2336387a837b86f78c062b))
- add nav button to schedule page ([e628f39](https://gitlab.com/openstapps/app/commit/e628f396e22e51da2c9f2489fe89e42ccf474e2b))
- add openingHours config and catch its errors ([6125d43](https://gitlab.com/openstapps/app/commit/6125d43e8c18f2bf2afda67c0ff72e00d98ab34f))
- add PKCE parameters for PAIA auth ([f3e83bf](https://gitlab.com/openstapps/app/commit/f3e83bfcc88423f0935a060ccd0bf6198da58351))
- address late init from ionic components ([0bce9e5](https://gitlab.com/openstapps/app/commit/0bce9e5452fc5d05123756348dc30308de675bfa))
- adjust code to overcome the breaking changes (ionic 4 to 5) ([f779042](https://gitlab.com/openstapps/app/commit/f7790426cd2da4a6b33e2aa73783943f45b3de02)), closes [#70](https://gitlab.com/openstapps/app/issues/70)
- adjust hebis catalog templates ([83d9a4a](https://gitlab.com/openstapps/app/commit/83d9a4a8b8fe5b8687c72a717b3a2964524006e0))
- adjust library account user info ([bafabb1](https://gitlab.com/openstapps/app/commit/bafabb1d4ec299e2bea43cd4b8442ef33be2329a)), closes [#331](https://gitlab.com/openstapps/app/issues/331)
- adjust npm docker scripts and typos ([82bb15b](https://gitlab.com/openstapps/app/commit/82bb15b863e2d2e4df20244fda2f2e0d049ff43f))
- angular1 ng-if leftover ([25434d5](https://gitlab.com/openstapps/app/commit/25434d54e3800fd72a6c5d9188fb11f441d73aa9))
- assign navigation app name dynamically ([90b9733](https://gitlab.com/openstapps/app/commit/90b97339d3948b0864f634519416fe4a458b459f))
- background fetch crashing android app ([3316ad9](https://gitlab.com/openstapps/app/commit/3316ad9169ed2b29a2755405589213f824aec9d1))
- calculating SCDateSeries for next unit view ([82ba5f8](https://gitlab.com/openstapps/app/commit/82ba5f81211fb10cc5fde04991856567c4ac9680))
- canteen module layout ([b89f5c4](https://gitlab.com/openstapps/app/commit/b89f5c4edd1ed14f7529edc4e4ea54f9d98fda7c))
- canteen module layout ([6f7c680](https://gitlab.com/openstapps/app/commit/6f7c680ed89f027d863ebc02f5b24895d84f32e4))
- cards not having rounded corners in safari ([8a04a43](https://gitlab.com/openstapps/app/commit/8a04a439032920ead799f8b7483f29b896797c37))
- catch error `Setting "language" not provided` ([584878d](https://gitlab.com/openstapps/app/commit/584878d9503b8406b6ee7ec69dde5b8b3c4fd954))
- CI stage/job setup ([ae429ca](https://gitlab.com/openstapps/app/commit/ae429ca5fb3b5f10cad377d37b251806b3dabf6c))
- config.get issue by updating ionic ([9386351](https://gitlab.com/openstapps/app/commit/93863510fac32ed5b887011175a4807df3f522b8))
- **config:** fix catch ConfigFetchError in getValue ([161da63](https://gitlab.com/openstapps/app/commit/161da630ea59f6205ee53dece950972d4f36ada5)), closes [#46](https://gitlab.com/openstapps/app/issues/46)
- correct data path color ([0d755bc](https://gitlab.com/openstapps/app/commit/0d755bcbd3d6fea59a4f7a59981fd28844ff90d5))
- correct html whitespace handling for icon detection ([9bc3642](https://gitlab.com/openstapps/app/commit/9bc3642990b687dd524470fd26df80351aa85f1e))
- daia availability ([13cee2d](https://gitlab.com/openstapps/app/commit/13cee2d4261c7301c1c763446ae44dcdd005172d))
- dashboard next unit structural directive causing animation issues ([c8f6a27](https://gitlab.com/openstapps/app/commit/c8f6a27c571e51bcc0ac0120968e6bc9a20c8dd7))
- **data:** fix and adjust detail test using translation ([478f49a](https://gitlab.com/openstapps/app/commit/478f49a8744211b3c9458b3dadc791d62a46ae46)), closes [#50](https://gitlab.com/openstapps/app/issues/50)
- **data:** fix template and other consistency issues ([c3bc227](https://gitlab.com/openstapps/app/commit/c3bc227a3ca4a295b2b31bfe7fd34830b33c9f05))
- detail page when dish of mensa selected ([e5c2270](https://gitlab.com/openstapps/app/commit/e5c227073a183a1c562e17f3fe14a51048d01637)), closes [#140](https://gitlab.com/openstapps/app/issues/140)
- download events should respect selection ([28fbfef](https://gitlab.com/openstapps/app/commit/28fbfef18cc3b457f7020a70157ea7a4fff345d0))
- enable background fetch on iOS ([a1592f8](https://gitlab.com/openstapps/app/commit/a1592f84cc48f7cae8c55ef806cddbe806034bb5))
- enable overflow for day labels in schedule ([1195c5f](https://gitlab.com/openstapps/app/commit/1195c5ffc8cea07f1e224d92a7fb25aa5858bf0a))
- encode URI parameter to proxy URI ([bc13cc5](https://gitlab.com/openstapps/app/commit/bc13cc5e1fe6144fe0a0e53c0748a154844a5c29)), closes [#326](https://gitlab.com/openstapps/app/issues/326)
- extend landing period button not working on android ([0caa69c](https://gitlab.com/openstapps/app/commit/0caa69c28cbb2f962b70a1da13659739c1c6dd3e)), closes [#333](https://gitlab.com/openstapps/app/issues/333)
- failing native http requests with body ([fed4f20](https://gitlab.com/openstapps/app/commit/fed4f20c3cf43221512f3d2b6dd3c3fe7a4cf43a))
- feedback not allowing valid emails ([cf74c8e](https://gitlab.com/openstapps/app/commit/cf74c8e19f8bd34a31d5af931781e84be2c04dea)), closes [#349](https://gitlab.com/openstapps/app/issues/349)
- fix issues found by ng build for production ([a503811](https://gitlab.com/openstapps/app/commit/a503811c1cfcf909571af766ccd884856aad8ec9)), closes [#48](https://gitlab.com/openstapps/app/issues/48)
- fix various typos ([ad0dae4](https://gitlab.com/openstapps/app/commit/ad0dae46ff04d28551d2ece950d9a4d3442541d2))
- fixate webdriver to match used chrome version ([24dbb42](https://gitlab.com/openstapps/app/commit/24dbb42b345458b7dbdd17b2759824b3b68cb0e4))
- generate library online links properly ([9854541](https://gitlab.com/openstapps/app/commit/9854541a0c062c31bce167673586dccc8af81785)), closes [#340](https://gitlab.com/openstapps/app/issues/340)
- handle prices as an optional property ([9e71efc](https://gitlab.com/openstapps/app/commit/9e71efca9f7b1086db26f580192d6b349bdcb964)), closes [#219](https://gitlab.com/openstapps/app/issues/219)
- header logo changing size on ios navigate ([38f0a30](https://gitlab.com/openstapps/app/commit/38f0a300769a5b7cda35af0927c17099f93981b8))
- ignore null-island location ([d3188f5](https://gitlab.com/openstapps/app/commit/d3188f50905d610097de6c90bc58e6373d30e0dc)), closes [#149](https://gitlab.com/openstapps/app/issues/149)
- item not available in offer template ([7b402d6](https://gitlab.com/openstapps/app/commit/7b402d61c30aed81a5671d778a38c8393a5bc7c8)), closes [#110](https://gitlab.com/openstapps/app/issues/110)
- library account missing ready for pickup ([e504d8c](https://gitlab.com/openstapps/app/commit/e504d8cf6dd1c12fcb8f6a315527337313662385)), closes [#330](https://gitlab.com/openstapps/app/issues/330)
- library fines should load item title only if needed ([cbb949e](https://gitlab.com/openstapps/app/commit/cbb949e3977a5821e6bd1b654dec66a82e4d8c81)), closes [#342](https://gitlab.com/openstapps/app/issues/342)
- links of timetable tabs ([837c69b](https://gitlab.com/openstapps/app/commit/837c69bb21c92a91259051d5680e1073b390fc0e)), closes [#144](https://gitlab.com/openstapps/app/issues/144)
- logged out button not showing on profile ([ebdc14d](https://gitlab.com/openstapps/app/commit/ebdc14d3c398ac7564c077757c564f4e414fe244)), closes [#239](https://gitlab.com/openstapps/app/issues/239)
- make action chips react to changes of their item ([c0d0b1b](https://gitlab.com/openstapps/app/commit/c0d0b1bd9934e8d9e23f47825cae6a5d8ea2f38a))
- make keyboard dismissable on mobile devices ([b2cc1fd](https://gitlab.com/openstapps/app/commit/b2cc1fd91fc5bd66c994dcbe10771a22d91a1b3e))
- map search on iOS ([7d449b4](https://gitlab.com/openstapps/app/commit/7d449b43d0d86825f711848110ac6f044084eba0)), closes [#148](https://gitlab.com/openstapps/app/issues/148)
- map widget not loading tiles properly ([09aa7bb](https://gitlab.com/openstapps/app/commit/09aa7bb5c59e8d167fa91c69745f5f80229094d7)), closes [#127](https://gitlab.com/openstapps/app/issues/127)
- missing init (config setup) in default auth service ([f16e539](https://gitlab.com/openstapps/app/commit/f16e5394cce5a8019f4dfe367e5e0a2f0cca4ce2)), closes [#227](https://gitlab.com/openstapps/app/issues/227)
- missing translations ([30d801a](https://gitlab.com/openstapps/app/commit/30d801a3b419b382d40d96dda995bd35e493523d))
- modals not reacting after several uses ([f39c29f](https://gitlab.com/openstapps/app/commit/f39c29f10bc05ab986b74dfa8a8648df5fb307b4))
- news module not scrollable on large screens ([44b6a4a](https://gitlab.com/openstapps/app/commit/44b6a4aea008ca6c89f6cb289467429fb3f8c1fa))
- ngx-translate defaultLanguage not set ([581a5b2](https://gitlab.com/openstapps/app/commit/581a5b2e55ceda99cf7c41200366c3c5e09f1c63))
- omit sync native calendar when no uuids ([c9720dc](https://gitlab.com/openstapps/app/commit/c9720dc104cce78ae1a422d5efed7b8a58946836)), closes [#177](https://gitlab.com/openstapps/app/issues/177)
- opening hours pipe refreshing too often ([95e1734](https://gitlab.com/openstapps/app/commit/95e1734d26b175d8d1156abb10863155fed89ec0))
- overhaul auth to avoid issues ([99e8d6c](https://gitlab.com/openstapps/app/commit/99e8d6c9bcbc68b639b035af36bc05de0237b1f9)), closes [#336](https://gitlab.com/openstapps/app/issues/336)
- overview search bar scrolling behind header ([a037090](https://gitlab.com/openstapps/app/commit/a037090eec06e867a703b88a43620a74770287fe))
- performance degradation when scrolling ([f0a45d1](https://gitlab.com/openstapps/app/commit/f0a45d1b8eb2b33a6c68b94ed7f96f81db3a728b))
- person list should use long-inline-text ([8b2b853](https://gitlab.com/openstapps/app/commit/8b2b853942ac76904ff49d940dfef625b0397150))
- prevent multiple heavy setting inits ([f772637](https://gitlab.com/openstapps/app/commit/f7726378f443d9809a6174411d25a811e1d0b5e9))
- prevent opening invalid links ([fdee2db](https://gitlab.com/openstapps/app/commit/fdee2db8a42b8f6c99c4a72b3104ae0ba1a41c5a)), closes [#328](https://gitlab.com/openstapps/app/issues/328)
- profile module items show click effect on scroll ([8b2f2c0](https://gitlab.com/openstapps/app/commit/8b2f2c063c65278580d9469b00d9e67f01caaffb))
- recurring schedule offset and event limit ([9c6b513](https://gitlab.com/openstapps/app/commit/9c6b5131cd4cadb2572769d368b346054f19de1c))
- refresh token not used by default auth provider ([15ccbe4](https://gitlab.com/openstapps/app/commit/15ccbe4c1879417f2fc5849204fa9f6bdcce87fc)), closes [#311](https://gitlab.com/openstapps/app/issues/311)
- remove "extend landing" button when renewal not possible ([f60a228](https://gitlab.com/openstapps/app/commit/f60a22839200019a38586a14a0cce32e2c0029e7)), closes [#338](https://gitlab.com/openstapps/app/issues/338)
- remove item before adding it to secure storage ([ec511fb](https://gitlab.com/openstapps/app/commit/ec511fb8f40219e2559b08c62bd915d773d2a36f))
- schedule navigation bar layout ([e7d5f83](https://gitlab.com/openstapps/app/commit/e7d5f83100f43564b55249909a6658e583e3a9b2))
- set android status bar color correctly ([b38a969](https://gitlab.com/openstapps/app/commit/b38a96996a10e4e43ff1b06ecd2235a0e3bdfa1c))
- setting of default language ([ccf8b1a](https://gitlab.com/openstapps/app/commit/ccf8b1a5cc9fe834ba3e04a1ed67b2d082004403))
- show nothing for empty array properties ([1c56c89](https://gitlab.com/openstapps/app/commit/1c56c891e15b034826b5d6b2b35141fc872c922d)), closes [#154](https://gitlab.com/openstapps/app/issues/154)
- single map place width ([88684f0](https://gitlab.com/openstapps/app/commit/88684f068ab130f43e520c87f1d7383e0ae43944)), closes [#147](https://gitlab.com/openstapps/app/issues/147)
- some android devices don't support implied css animation units ([54cc883](https://gitlab.com/openstapps/app/commit/54cc8838aefe8f8c2d25d9228a136ef727a08230))
- status bar being black on Android 13 devices ([feee9e8](https://gitlab.com/openstapps/app/commit/feee9e8db90e66cf2346f7c5cc24f075eb70676c))
- suppress router event logs in console ([28caaf1](https://gitlab.com/openstapps/app/commit/28caaf1d21f7961b678cf339a712abf860ade5e7)), closes [#207](https://gitlab.com/openstapps/app/issues/207)
- swap missing icon after ionic update ([643b6c9](https://gitlab.com/openstapps/app/commit/643b6c967f3268cb305a24d614c3bc91275b0ac3))
- temporary disable flaky ui test ([6b9b1fa](https://gitlab.com/openstapps/app/commit/6b9b1fa8548d5c5fca04b2c1d63e893de39278a2))
- timetable dates cannot be removed ([9242438](https://gitlab.com/openstapps/app/commit/924243813207fa791d3c4938f8653a999b6382ff))
- translate back button title ([b8db0f3](https://gitlab.com/openstapps/app/commit/b8db0f3e70a46f2b493e183a244cb29d1954c257))
- translations ([5e1a902](https://gitlab.com/openstapps/app/commit/5e1a902d4c0d2345f21500fba5394c1907e04eb8))
- typo in translation ([7928534](https://gitlab.com/openstapps/app/commit/7928534d88a26db28b098bbceb47bc1103022a57))
- update core and apply stricter tslint rules ([911492d](https://gitlab.com/openstapps/app/commit/911492d064ff0280dd6626244cd8038cbfc0f408))
- use HashLocationStrategy for routes ([9d68212](https://gitlab.com/openstapps/app/commit/9d682125db55c87cab2b33c7633bfa133d2fc5a9)), closes [#54](https://gitlab.com/openstapps/app/issues/54)
- use localized date and time ([6ca0b97](https://gitlab.com/openstapps/app/commit/6ca0b9763761c5204a757a243056a087c5f35fd9))
- use stapps core version to compare with backends' core version ([66b8720](https://gitlab.com/openstapps/app/commit/66b8720da0f264824a396f2d9e598b0e48c8e3d1)), closes [#77](https://gitlab.com/openstapps/app/issues/77)
- user info card ([998edcb](https://gitlab.com/openstapps/app/commit/998edcb5cdfb588c2986f466f4a2951f172a8bb4)), closes [#305](https://gitlab.com/openstapps/app/issues/305)
### Features
- add "no results" screen to search ([c75ca68](https://gitlab.com/openstapps/app/commit/c75ca68c440a20e197213ecbb47d05fc293afd9c))
- add about module ([d420008](https://gitlab.com/openstapps/app/commit/d42000892694f4a3b29fa623c43fb45f8ba54687))
- add action chips to search results ([67fb4a4](https://gitlab.com/openstapps/app/commit/67fb4a43c95043caba50d43ace2ab276f3319b81))
- add auth support (default and paia) ([b5f239e](https://gitlab.com/openstapps/app/commit/b5f239ea4edebd0d27b1cdaad4a830998ce2f681))
- add backend toggle ([c1d3330](https://gitlab.com/openstapps/app/commit/c1d33303aa11da3b3e150c6717d77ef484a16ac1))
- add basic templates for data list items ([3e697b1](https://gitlab.com/openstapps/app/commit/3e697b17b4448c15781d0f6dd55577b638e9d974))
- add catalog module ([03084b1](https://gitlab.com/openstapps/app/commit/03084b1c966de98b3723d0bee2b2475589393c59))
- add ConfigModule and FakeBackendInterceptor ([406f400](https://gitlab.com/openstapps/app/commit/406f40055567bfde4ec5edf26cff942411bd073e)), closes [#34](https://gitlab.com/openstapps/app/issues/34) [#37](https://gitlab.com/openstapps/app/issues/37)
- add detail view for news ([2566a71](https://gitlab.com/openstapps/app/commit/2566a71a81a3408dbb16b97d3a453d95e25d1f00))
- add duration pipe with frequency capabilites ([49a1758](https://gitlab.com/openstapps/app/commit/49a1758da358958ffe590700c19aaf90ec748ee5))
- add favorites support ([e9452d6](https://gitlab.com/openstapps/app/commit/e9452d6520c34f6513623c16e291dc23d6ea9757))
- add feedback module ([867f9e9](https://gitlab.com/openstapps/app/commit/867f9e9b832e3bd54c04801fef63a11543e8f3dd))
- add filter chips for news ([5435f85](https://gitlab.com/openstapps/app/commit/5435f85cc43dc3baa774a5008d2920ac7b3783f6))
- add formatting pipes basted on Intl ([4b932af](https://gitlab.com/openstapps/app/commit/4b932af1c07e1af4369414667a987d31181c073c))
- add HeBIS HDS search ([9a3241c](https://gitlab.com/openstapps/app/commit/9a3241c42ab59e15c0084178f76dc4a2450a2bb8))
- add library account screens ([080e6fa](https://gitlab.com/openstapps/app/commit/080e6fa3e8c18e9608d7fa2efc95e4fd65c43a15))
- add library action confirmations ([42b860e](https://gitlab.com/openstapps/app/commit/42b860e41793fc3983a39237a4f7128416485fae)), closes [#334](https://gitlab.com/openstapps/app/issues/334)
- add logger ([a0c798f](https://gitlab.com/openstapps/app/commit/a0c798f765d87c5eebcbed65b70f3b05f285d0ce))
- add map module ([c1c9a92](https://gitlab.com/openstapps/app/commit/c1c9a92ec900403218b887fdebfe5132b232e1e0))
- add new font and new icons ([915fd72](https://gitlab.com/openstapps/app/commit/915fd72bd4bfed16e15fcc3c57879db0ec0379e2))
- add not found screen ([e3d9ef4](https://gitlab.com/openstapps/app/commit/e3d9ef40ccd626c81c67ea2d790eecbe6e025780))
- add permission check for geoLocation setting ([d5fa2fd](https://gitlab.com/openstapps/app/commit/d5fa2fd9a578d48cd2513eeb1380f1d2bc4d3754))
- add service and pipe for core translator ([4565600](https://gitlab.com/openstapps/app/commit/456560026cc9550a10a9f42657d942122be34d53))
- apply new layout overhaul ([7bbdba5](https://gitlab.com/openstapps/app/commit/7bbdba5c0b886e2789d2a603c4be627dfd16b60e))
- assessment tree view ([0b037f9](https://gitlab.com/openstapps/app/commit/0b037f96e634b412fbaaee24747df08afdc0e565))
- assessments module ([e68d1b7](https://gitlab.com/openstapps/app/commit/e68d1b73f94b36abcefe9b2bf42e98de00b69188))
- calendar plugin ([a57c302](https://gitlab.com/openstapps/app/commit/a57c3029df61ac3157c856744380a85dc001abc6))
- dashboard ui tests ([9f8ab5c](https://gitlab.com/openstapps/app/commit/9f8ab5c7a15a918f7bd05423f0a43f22a33d9228))
- **data:** add basic methods of data provider ([ffe05e4](https://gitlab.com/openstapps/app/commit/ffe05e4548fc399183ef651047cb02a3cdc80c67)), closes [#1](https://gitlab.com/openstapps/app/issues/1)
- **data:** add data detail templates ([5855acc](https://gitlab.com/openstapps/app/commit/5855accc169579d87f5779fd602d4f00f2b479a1))
- **data:** add method that checks if data item has been saved ([017fc67](https://gitlab.com/openstapps/app/commit/017fc67765bdb75542045830fb85f8eb4b899485))
- **data:** implement basic facets handling ([b6f92a7](https://gitlab.com/openstapps/app/commit/b6f92a74494e1a39d5c828d593eb70c7002bb0f6)), closes [#1](https://gitlab.com/openstapps/app/issues/1)
- **data:** show skeleton screens before data is loaded ([e1039aa](https://gitlab.com/openstapps/app/commit/e1039aa2260a0e9d8ccca5a18ded480bf2f12530)), closes [#4](https://gitlab.com/openstapps/app/issues/4)
- **data:** use data provider for list and detail view ([7caaa18](https://gitlab.com/openstapps/app/commit/7caaa18b7eb94ed8e4ff4e54d760ba1dba3ae3be))
- **data:** use general template for all offers ([58960a2](https://gitlab.com/openstapps/app/commit/58960a29ea0cd73f26a43186b41f5b53864810e0))
- display availability and item data for library items ([d571b1d](https://gitlab.com/openstapps/app/commit/d571b1dbe59f8e2270d88dd050b94283bf0a7056))
- dynamic news page rows ([848d257](https://gitlab.com/openstapps/app/commit/848d2574c7046d6f84b91e32aa83ca57fca8ad2e))
- expandable accordion in grades module ([3f81afd](https://gitlab.com/openstapps/app/commit/3f81afda82cf87bb393fbb3b71d27eee77ae42d9))
- get tab navigation items from config ([c3130a3](https://gitlab.com/openstapps/app/commit/c3130a392a53c9ec3657e24a53ed0b3333ba162b))
- Implement variable for styling ([8ecf347](https://gitlab.com/openstapps/app/commit/8ecf347c9a8abac9347dca45e99ebe35eca8f252))
- include font licenses in the licenses section ([82479f4](https://gitlab.com/openstapps/app/commit/82479f463cbee834507a0c8faf895a729631eb06))
- Ionic v6 breadcrumbs in catalog module ([7b491ed](https://gitlab.com/openstapps/app/commit/7b491ed3bb5466a845493bd8ea0bbb836a4f03d2))
- lazy load all news ([e48134e](https://gitlab.com/openstapps/app/commit/e48134eddcd1ca4d5ec5dbf910571e33a3311ba1))
- **menu:** add context menu ([1dbf451](https://gitlab.com/openstapps/app/commit/1dbf4515fe57cc8250a7fa2213ced682e3e5e0fc)), closes [#3](https://gitlab.com/openstapps/app/issues/3)
- navigation rail ([6b08af6](https://gitlab.com/openstapps/app/commit/6b08af6a746bf12005d3297ec97c130e84477615))
- news module ([22cd0af](https://gitlab.com/openstapps/app/commit/22cd0af1bf92a4576316f5510c22f012e085a237))
- profile page sections ([e395e9d](https://gitlab.com/openstapps/app/commit/e395e9d270f41bd4f6e5ecd88e438a28dde92465)), closes [#233](https://gitlab.com/openstapps/app/issues/233) [#261](https://gitlab.com/openstapps/app/issues/261) [#267](https://gitlab.com/openstapps/app/issues/267)
- refresh on pull for news module ([1f3d9ad](https://gitlab.com/openstapps/app/commit/1f3d9ad5f0c0557add2dcf242cf0b7dd7685bb1b))
- resume at origin path after login ([a5e5a5b](https://gitlab.com/openstapps/app/commit/a5e5a5b40799e7505557f7ebd764b9c563be0f4b)), closes [#168](https://gitlab.com/openstapps/app/issues/168)
- schedule layout ([e416590](https://gitlab.com/openstapps/app/commit/e4165901bb5efa6b38e397cdf5d66138e396d7f2))
- scroll schedule cursor into view ([bc4c3d7](https://gitlab.com/openstapps/app/commit/bc4c3d78dbd906243dcddac4db9ac8ccaca79056))
- search url query param handling ([f349bd7](https://gitlab.com/openstapps/app/commit/f349bd72335c47d292d0a007b1a4ce7f5c694a61))
- seperate dishes by menu sections ([400c6b8](https://gitlab.com/openstapps/app/commit/400c6b8d8c5300035862186096e38883f781d297))
- show availability in offers ([5fdef95](https://gitlab.com/openstapps/app/commit/5fdef95c065e7b467a13045adbb56a641cb2dc12))
- show feedback when map search yields no results ([c54ea86](https://gitlab.com/openstapps/app/commit/c54ea867bd64af187446dbf8dc03967aae600961))
- show menu for multiple days for canteens and cafes ([3c079cd](https://gitlab.com/openstapps/app/commit/3c079cd189e3b75d3b203bd46ab57378f99e88cc)), closes [#19](https://gitlab.com/openstapps/app/issues/19) [#79](https://gitlab.com/openstapps/app/issues/79)
- **storage:** add search using regex ([86b9bff](https://gitlab.com/openstapps/app/commit/86b9bff09a51b17151efa5ec322cddcc50a54cb2))
- **storage:** support deletion of multiple entries ([63266f5](https://gitlab.com/openstapps/app/commit/63266f588f6ddb2476e2cea4bab42a3864f77470))
- **storage:** support search using a string ([4334cad](https://gitlab.com/openstapps/app/commit/4334cad68c7d0abb7443e245b6eb983804547925))
- support deep links ([2e3f668](https://gitlab.com/openstapps/app/commit/2e3f6684ef5fbac8e4fb127c536b2b438399ce37))
- support overlapping timetable dates ([93c37b2](https://gitlab.com/openstapps/app/commit/93c37b26cca7764dea66fb12c0e53acc8fd78d2b))
- tab navigation bar animations and state ([7ecba0b](https://gitlab.com/openstapps/app/commit/7ecba0b7819ae5a7ab32d86f6049de0ab6c68e55))
- timetable module - schedule and calendar ([d8ede00](https://gitlab.com/openstapps/app/commit/d8ede006dfbd613dfbc752eb6de80db2e7e84531))
- turn on oauth2 state check for PAIA ([5bd0b50](https://gitlab.com/openstapps/app/commit/5bd0b50816973548a0a4aa5dbed3f2d0902590dd)), closes [#172](https://gitlab.com/openstapps/app/issues/172)
- use http interceptor for backendless development ([2558163](https://gitlab.com/openstapps/app/commit/2558163ad6c3038445a79e6338f1827cb1e6510e)), closes [#37](https://gitlab.com/openstapps/app/issues/37)
- use school-neutral news image fallback via css ([bb94c71](https://gitlab.com/openstapps/app/commit/bb94c71761ca5d3bf6639476ba0c143678cfabbd))
- webpack bundle analyzer ([552911c](https://gitlab.com/openstapps/app/commit/552911cfcfecec8d9be8b8bbb155b597d1f70fa2))
## 0.0.1
### Features
- add the app ([8b23159](https://gitlab.com/openstapps/app/commit/8b23159e678773b08252bc5826510de2a302fa1d))
+2 -2
View File
@@ -4,10 +4,10 @@
FROM node:18-alpine3.18 FROM node:18-alpine3.18
WORKDIR /app WORKDIR /app
COPY www/browser /app/www/browser COPY www/ /app/www
COPY package.json /app COPY package.json /app
EXPOSE 8100 EXPOSE 8100
RUN npm install -g http-server RUN npm install -g http-server
CMD http-server www/browser --p 8100 CMD http-server www --p 8100
+18 -64
View File
@@ -13,25 +13,25 @@ The StApps 1.x.x (legacy app, but current app in stores) is written using Ionic
There are (`npm`) scripts defined to get the app running as quickly as possible. Those scripts (shortcuts for docker commands) are called using the syntax `npm run + <script-name>`. So we have the following commands available: There are (`npm`) scripts defined to get the app running as quickly as possible. Those scripts (shortcuts for docker commands) are called using the syntax `npm run + <script-name>`. So we have the following commands available:
```sh ```
npm run docker:pull npm run docker:pull
``` ```
which pulls the up-to-date image ([Dockerfile](Dockerfile)) which contains all the tools needed for building, serving and deploying the app. which pulls the up-to-date image ([Dockerfile](Dockerfile)) which contains all the tools needed for building, serving and deploying the app.
```sh ```
npm run docker:enter npm run docker:enter
``` ```
which enters the container on docker builder image, where we can run `npm install` (to install the required npm packages) and `npm build` (to build the app: convert into executable files), but also any other arbitrary commands with the tools available in the docker image. which enters the container on docker builder image, where we can run `npm install` (to install the required npm packages) and `npm build` (to build the app: convert into executable files), but also any other arbitrary commands with the tools available in the docker image.
```sh ```
npm run docker:build npm run docker:build
``` ```
which runs `npm install` (to install the required npm packages) and `npm build` (to build the app: convert into executable files) in the docker container which runs on the docker builder image. which runs `npm install` (to install the required npm packages) and `npm build` (to build the app: convert into executable files) in the docker container which runs on the docker builder image.
```sh ```
npm run docker:serve npm run docker:serve
``` ```
@@ -39,7 +39,7 @@ which serves the app for running it in the browser. It basically runs `ionic ser
## How to build and start the app using the default backend? ## How to build and start the app using the default backend?
```sh ```
npm run build npm run build
npm run start npm run start
``` ```
@@ -86,98 +86,52 @@ addToIonicDB(
You'll need to run _Chromium_ using You'll need to run _Chromium_ using
```sh ```shell
pnpm chromium:no-cors pnpm chromium:no-cors
``` ```
### Help, I can't log in! ### Help, I can't log in!
Login services will often block hosts not coming from the production Login services will often block hosts not coming from the production
server. server. You can circumvent this locally by using the `:virtual-host`
scripts:
#### Web ```shell
On the web you can circumvent this locally by using the `:virtual-host` scripts:
```sh
# Start the dev server on mobile.app.uni-frankfurt.de # Start the dev server on mobile.app.uni-frankfurt.de
pnpm start:virtual-host pnpm start:virtual-host
# Run chromium with flags that redirect mobile.app.uni-frankfurt.de to localhost:8100 # Run chromium with flags that redirect mobile.app.uni-frankfurt.de to localhost:8100
pnpm chromium:virtual-host pnpm chromium:virtual-host
``` ```
#### Android
On Android you will need to change the `custom_url_scheme` values
to `de.unifrankfurt.app` in the following files:
- `android/app/src/main/res/values/strings.xml`
- `src/environment/environment.ts`
Then start the app normally as you would
```sh
pnpm run:android
```
**This alone will not make auth work**, only the login flow.
If you need to test login, you have to disable live reload:
```sh
pnpm ionic capacitor run android
```
_**CAUTION:** a remote chrome debugging session can in some
cases hijack the device's ADB connection. If the connection
fails for no obvious reason, close chrome and uninstall the
app, then try again._
#### iOS
On Android you will need to change the `custom_url_scheme` value in
`src/environment/environment.ts` as well as the `CFBundleURLTypes`
in `ios/App/App/Info.plist`.
- make sure to remove any `Info.plist.orig` as capacitor might override
the modified `Info.plist` with that.
- make sure you have a valid device in XCode (Simulator or real device).
After that, run
```sh
pnpm run:ios
```
### Running the app ### Running the app
Install the npm packages needed for running the app (as for any other node project which uses npm): Install the npm packages needed for running the app (as for any other node project which uses npm):
```sh ```
npm install npm install
``` ```
Check the code for linter issues: Check the code for linter issues:
```sh ```
npm run lint npm run lint
``` ```
Automatically fix linter issues (those where autofix is possible): Automatically fix linter issues (those where autofix is possible):
```sh ```
npm run lint:fix npm run lint:fix
``` ```
Build the app (transpile etc.): Build the app (transpile etc.):
```sh ```
npm run build npm run build
``` ```
Open the app in the browser: Open the app in the browser:
```sh ```
ionic serve ionic serve
``` ```
@@ -185,7 +139,7 @@ ionic serve
Run the app for testing on an android device (with live reload in the webview / device, when files are changed): Run the app for testing on an android device (with live reload in the webview / device, when files are changed):
```sh ```
npm run build # if needed npm run build # if needed
npm run resources:android # generate needed resources (icons and splashscreens) npm run resources:android # generate needed resources (icons and splashscreens)
npm run docker:run:android # runs "ionic capacitor run android --livereload --external" on a selected device npm run docker:run:android # runs "ionic capacitor run android --livereload --external" on a selected device
@@ -205,7 +159,7 @@ Besides that, it is possible to monitor processes (and so the processes related
Build the (debug) app for testing on an android device (creates an APK file in the android's build outputs path): Build the (debug) app for testing on an android device (creates an APK file in the android's build outputs path):
```sh ```
npm run docker:build:android npm run docker:build:android
``` ```
@@ -215,13 +169,13 @@ The mentioned `docker:*:android` npm commands are executed in a docker container
Execute unit tests: Execute unit tests:
```sh ```
npm test npm test
``` ```
Execute e2e tests: Execute e2e tests:
```sh ```
npm run e2e npm run e2e
``` ```
-5
View File
@@ -94,8 +94,3 @@ capacitor-cordova-android-plugins
# Copied web assets # Copied web assets
app/src/main/assets/public app/src/main/assets/public
# Generated Config files
app/src/main/assets/capacitor.config.json
app/src/main/assets/capacitor.plugins.json
app/src/main/res/xml/config.xml
+3 -3
View File
@@ -1,8 +1,8 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
android { android {
namespace = "de.anyschool.app" namespace "de.anyschool.app"
compileSdk = rootProject.ext.compileSdkVersion compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig { defaultConfig {
applicationId "de.anyschool.app" applicationId "de.anyschool.app"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
@@ -13,7 +13,7 @@ android {
aaptOptions { aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
// Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61 // Default: https://android.googlesource.com/platform/frameworks/base/+/282e181b58cf72b6ca770dc7ca5f91f135444502/tools/aapt/AaptAssets.cpp#61
ignoreAssetsPattern = '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~' ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
} }
} }
buildTypes { buildTypes {
@@ -2,15 +2,13 @@
android { android {
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_21 sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_21 targetCompatibility JavaVersion.VERSION_17
} }
} }
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle" apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
dependencies { dependencies {
implementation project(':capacitor-community-in-app-review')
implementation project(':capacitor-community-screen-brightness')
implementation project(':capacitor-app') implementation project(':capacitor-app')
implementation project(':capacitor-browser') implementation project(':capacitor-browser')
implementation project(':capacitor-clipboard') implementation project(':capacitor-clipboard')
@@ -23,7 +21,6 @@ dependencies {
implementation project(':capacitor-local-notifications') implementation project(':capacitor-local-notifications')
implementation project(':capacitor-network') implementation project(':capacitor-network')
implementation project(':capacitor-preferences') implementation project(':capacitor-preferences')
implementation project(':capacitor-screen-orientation')
implementation project(':capacitor-share') implementation project(':capacitor-share')
implementation project(':capacitor-splash-screen') implementation project(':capacitor-splash-screen')
implementation project(':transistorsoft-capacitor-background-fetch') implementation project(':transistorsoft-capacitor-background-fetch')
@@ -9,7 +9,7 @@
android:theme="@style/AppTheme" android:theme="@style/AppTheme"
android:usesCleartextTraffic="true"> android:usesCleartextTraffic="true">
<activity <activity
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation|density" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout"
android:exported="true" android:exported="true"
android:label="@string/title_activity_main" android:label="@string/title_activity_main"
android:launchMode="singleTask" android:launchMode="singleTask"
@@ -1,12 +1,4 @@
[ [
{
"pkg": "@capacitor-community/in-app-review",
"classpath": "com.getcapacitor.community.inappreview.InAppReviewPlugin"
},
{
"pkg": "@capacitor-community/screen-brightness",
"classpath": "com.elylucas.capscreenbrightness.ScreenBrightnessPlugin"
},
{ {
"pkg": "@capacitor/app", "pkg": "@capacitor/app",
"classpath": "com.capacitorjs.plugins.app.AppPlugin" "classpath": "com.capacitorjs.plugins.app.AppPlugin"
@@ -55,10 +47,6 @@
"pkg": "@capacitor/preferences", "pkg": "@capacitor/preferences",
"classpath": "com.capacitorjs.plugins.preferences.PreferencesPlugin" "classpath": "com.capacitorjs.plugins.preferences.PreferencesPlugin"
}, },
{
"pkg": "@capacitor/screen-orientation",
"classpath": "com.capacitorjs.plugins.screenorientation.ScreenOrientationPlugin"
},
{ {
"pkg": "@capacitor/share", "pkg": "@capacitor/share",
"classpath": "com.capacitorjs.plugins.share.SharePlugin" "classpath": "com.capacitorjs.plugins.share.SharePlugin"
@@ -7,6 +7,5 @@
<item name="android:statusBarColor">@color/colorPrimary</item> <item name="android:statusBarColor">@color/colorPrimary</item>
<item name="android:windowBackground">@color/colorPrimary</item> <item name="android:windowBackground">@color/colorPrimary</item>
<item name="android:navigationBarColor">@color/colorBackground</item> <item name="android:navigationBarColor">@color/colorBackground</item>
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
</style> </style>
</resources> </resources>
@@ -7,7 +7,6 @@
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> <item name="colorAccent">@color/colorAccent</item>
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
</style> </style>
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar"> <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar">
@@ -18,7 +17,6 @@
<item name="android:windowBackground">@color/colorPrimary</item> <item name="android:windowBackground">@color/colorPrimary</item>
<item name="android:navigationBarColor">@color/colorBackground</item> <item name="android:navigationBarColor">@color/colorBackground</item>
<item name="android:windowLightNavigationBar" tools:targetApi="27">true</item> <item name="android:windowLightNavigationBar" tools:targetApi="27">true</item>
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
</style> </style>
+2 -2
View File
@@ -7,8 +7,8 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:8.13.0' classpath 'com.android.tools.build:gradle:8.0.0'
classpath 'com.google.gms:google-services:4.4.4' classpath 'com.google.gms:google-services:4.3.15'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
+17 -26
View File
@@ -1,60 +1,51 @@
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN // DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
include ':capacitor-android' include ':capacitor-android'
project(':capacitor-android').projectDir = new File('../../../node_modules/.pnpm/@capacitor+android@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/android/capacitor') project(':capacitor-android').projectDir = new File('../../../node_modules/.pnpm/@capacitor+android@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/android/capacitor')
include ':capacitor-community-in-app-review'
project(':capacitor-community-in-app-review').projectDir = new File('../../../node_modules/.pnpm/@capacitor-community+in-app-review@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/in-app-review/android')
include ':capacitor-community-screen-brightness'
project(':capacitor-community-screen-brightness').projectDir = new File('../../../node_modules/.pnpm/@capacitor-community+screen-brightness@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/screen-brightness/android')
include ':capacitor-app' include ':capacitor-app'
project(':capacitor-app').projectDir = new File('../../../node_modules/.pnpm/@capacitor+app@8.1.1_@capacitor+core@8.5.2/node_modules/@capacitor/app/android') project(':capacitor-app').projectDir = new File('../../../node_modules/.pnpm/@capacitor+app@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/app/android')
include ':capacitor-browser' include ':capacitor-browser'
project(':capacitor-browser').projectDir = new File('../../../node_modules/.pnpm/@capacitor+browser@8.0.4_@capacitor+core@8.5.2/node_modules/@capacitor/browser/android') project(':capacitor-browser').projectDir = new File('../../../node_modules/.pnpm/@capacitor+browser@5.1.0_@capacitor+core@5.5.0/node_modules/@capacitor/browser/android')
include ':capacitor-clipboard' include ':capacitor-clipboard'
project(':capacitor-clipboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+clipboard@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/clipboard/android') project(':capacitor-clipboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+clipboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/clipboard/android')
include ':capacitor-device' include ':capacitor-device'
project(':capacitor-device').projectDir = new File('../../../node_modules/.pnpm/@capacitor+device@8.0.3_@capacitor+core@8.5.2/node_modules/@capacitor/device/android') project(':capacitor-device').projectDir = new File('../../../node_modules/.pnpm/@capacitor+device@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/device/android')
include ':capacitor-dialog' include ':capacitor-dialog'
project(':capacitor-dialog').projectDir = new File('../../../node_modules/.pnpm/@capacitor+dialog@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/dialog/android') project(':capacitor-dialog').projectDir = new File('../../../node_modules/.pnpm/@capacitor+dialog@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/dialog/android')
include ':capacitor-filesystem' include ':capacitor-filesystem'
project(':capacitor-filesystem').projectDir = new File('../../../node_modules/.pnpm/@capacitor+filesystem@8.1.3_@capacitor+core@8.5.2/node_modules/@capacitor/filesystem/android') project(':capacitor-filesystem').projectDir = new File('../../../node_modules/.pnpm/@capacitor+filesystem@5.1.4_@capacitor+core@5.5.0/node_modules/@capacitor/filesystem/android')
include ':capacitor-geolocation' include ':capacitor-geolocation'
project(':capacitor-geolocation').projectDir = new File('../../../node_modules/.pnpm/@capacitor+geolocation@8.2.2_@capacitor+core@8.5.2/node_modules/@capacitor/geolocation/android') project(':capacitor-geolocation').projectDir = new File('../../../node_modules/.pnpm/@capacitor+geolocation@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/geolocation/android')
include ':capacitor-haptics' include ':capacitor-haptics'
project(':capacitor-haptics').projectDir = new File('../../../node_modules/.pnpm/@capacitor+haptics@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/haptics/android') project(':capacitor-haptics').projectDir = new File('../../../node_modules/.pnpm/@capacitor+haptics@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/haptics/android')
include ':capacitor-keyboard' include ':capacitor-keyboard'
project(':capacitor-keyboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+keyboard@8.0.5_@capacitor+core@8.5.2/node_modules/@capacitor/keyboard/android') project(':capacitor-keyboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+keyboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/keyboard/android')
include ':capacitor-local-notifications' include ':capacitor-local-notifications'
project(':capacitor-local-notifications').projectDir = new File('../../../node_modules/.pnpm/@capacitor+local-notifications@8.3.1_@capacitor+core@8.5.2/node_modules/@capacitor/local-notifications/android') project(':capacitor-local-notifications').projectDir = new File('../../../node_modules/.pnpm/@capacitor+local-notifications@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/local-notifications/android')
include ':capacitor-network' include ':capacitor-network'
project(':capacitor-network').projectDir = new File('../../../node_modules/.pnpm/@capacitor+network@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/network/android') project(':capacitor-network').projectDir = new File('../../../node_modules/.pnpm/@capacitor+network@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/network/android')
include ':capacitor-preferences' include ':capacitor-preferences'
project(':capacitor-preferences').projectDir = new File('../../../node_modules/.pnpm/@capacitor+preferences@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/preferences/android') project(':capacitor-preferences').projectDir = new File('../../../node_modules/.pnpm/@capacitor+preferences@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/preferences/android')
include ':capacitor-screen-orientation'
project(':capacitor-screen-orientation').projectDir = new File('../../../node_modules/.pnpm/@capacitor+screen-orientation@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/screen-orientation/android')
include ':capacitor-share' include ':capacitor-share'
project(':capacitor-share').projectDir = new File('../../../node_modules/.pnpm/@capacitor+share@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/share/android') project(':capacitor-share').projectDir = new File('../../../node_modules/.pnpm/@capacitor+share@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/share/android')
include ':capacitor-splash-screen' include ':capacitor-splash-screen'
project(':capacitor-splash-screen').projectDir = new File('../../../node_modules/.pnpm/@capacitor+splash-screen@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/splash-screen/android') project(':capacitor-splash-screen').projectDir = new File('../../../node_modules/.pnpm/@capacitor+splash-screen@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/splash-screen/android')
include ':transistorsoft-capacitor-background-fetch' include ':transistorsoft-capacitor-background-fetch'
project(':transistorsoft-capacitor-background-fetch').projectDir = new File('../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@8.1.3_@capacitor+core@8.5.2/node_modules/@transistorsoft/capacitor-background-fetch/android') project(':transistorsoft-capacitor-background-fetch').projectDir = new File('../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@5.1.1_@capacitor+core@5.5.0/node_modules/@transistorsoft/capacitor-background-fetch/android')
include ':capacitor-secure-storage-plugin' include ':capacitor-secure-storage-plugin'
project(':capacitor-secure-storage-plugin').projectDir = new File('../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.13.0_@capacitor+core@8.5.2/node_modules/capacitor-secure-storage-plugin/android') project(':capacitor-secure-storage-plugin').projectDir = new File('../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.9.0_@capacitor+core@5.5.0/node_modules/capacitor-secure-storage-plugin/android')
Binary file not shown.
@@ -1,7 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-all.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
+15 -22
View File
@@ -15,8 +15,6 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# #
# SPDX-License-Identifier: Apache-2.0
#
############################################################################## ##############################################################################
# #
@@ -57,7 +55,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -85,8 +83,10 @@ done
# This is normally unused # This is normally unused
# shellcheck disable=SC2034 # shellcheck disable=SC2034
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@@ -114,7 +114,7 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;; NONSTOP* ) nonstop=true ;;
esac esac
CLASSPATH="\\\"\\\"" CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
@@ -133,21 +133,18 @@ location of your Java installation."
fi fi
else else
JAVACMD=java JAVACMD=java
if ! command -v java >/dev/null 2>&1 which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045 # shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
@@ -155,7 +152,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045 # shellcheck disable=SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@@ -200,20 +197,16 @@ if "$cygwin" || "$msys" ; then
done done
fi fi
# Collect all arguments for the java command;
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# Collect all arguments for the java command: # * put everything else in single quotes, so that it's not re-expanded.
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \ set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \ "-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \ -classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ org.gradle.wrapper.GradleWrapperMain \
"$@" "$@"
# Stop when "xargs" is not available. # Stop when "xargs" is not available.
+12 -14
View File
@@ -13,8 +13,6 @@
@rem See the License for the specific language governing permissions and @rem See the License for the specific language governing permissions and
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@@ -45,11 +43,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2 echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo. 1>&2 echo.
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. 1>&2 echo location of your Java installation.
goto fail goto fail
@@ -59,22 +57,22 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute if exist "%JAVA_EXE%" goto execute
echo. 1>&2 echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo. 1>&2 echo.
echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. 1>&2 echo location of your Java installation.
goto fail goto fail
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH= set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
+13 -13
View File
@@ -1,16 +1,16 @@
ext { ext {
minSdkVersion = 24 minSdkVersion = 22
compileSdkVersion = 36 compileSdkVersion = 33
targetSdkVersion = 36 targetSdkVersion = 33
androidxActivityVersion = '1.11.0' androidxActivityVersion = '1.7.0'
androidxAppCompatVersion = '1.7.1' androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.3.0' androidxCoordinatorLayoutVersion = '1.2.0'
androidxCoreVersion = '1.17.0' androidxCoreVersion = '1.10.0'
androidxFragmentVersion = '1.8.9' androidxFragmentVersion = '1.5.6'
coreSplashScreenVersion = '1.2.0' coreSplashScreenVersion = '1.0.0'
androidxWebkitVersion = '1.14.0' androidxWebkitVersion = '1.6.1'
junitVersion = '4.13.2' junitVersion = '4.13.2'
androidxJunitVersion = '1.3.0' androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.7.0' androidxEspressoCoreVersion = '3.5.1'
cordovaAndroidVersion = '14.0.1' cordovaAndroidVersion = '10.1.1'
} }
+5 -42
View File
@@ -11,12 +11,12 @@
"schematics": {}, "schematics": {},
"architect": { "architect": {
"build": { "build": {
"builder": "@angular-devkit/build-angular:application", "builder": "@angular-devkit/build-angular:browser",
"options": { "options": {
"outputPath": "www", "outputPath": "www",
"index": "src/index.html", "index": "src/index.html",
"browser": "src/main.ts", "main": "src/main.ts",
"polyfills": ["zone.js", "src/ion-icons.js"], "polyfills": "zone.js",
"tsConfig": "tsconfig.app.json", "tsConfig": "tsconfig.app.json",
"allowedCommonJsDependencies": [ "allowedCommonJsDependencies": [
"moment", "moment",
@@ -35,21 +35,6 @@
"glob": "**/*", "glob": "**/*",
"input": "src/assets", "input": "src/assets",
"output": "assets" "output": "assets"
},
{
"glob": "CHANGELOG.md",
"input": ".",
"output": "assets"
},
{
"glob": "maplibre-gl-worker.mjs",
"input": "node_modules/maplibre-gl/dist",
"output": "/"
},
{
"glob": "maplibre-gl-shared.mjs",
"input": "node_modules/maplibre-gl/dist",
"output": "/"
} }
], ],
"styles": [ "styles": [
@@ -82,7 +67,9 @@
] ]
}, },
"development": { "development": {
"buildOptimizer": false,
"optimization": false, "optimization": false,
"vendorChunk": true,
"extractLicenses": false, "extractLicenses": false,
"sourceMap": true, "sourceMap": true,
"namedChunks": true "namedChunks": true
@@ -205,30 +192,6 @@
}, },
"@ionic/angular-toolkit:page": { "@ionic/angular-toolkit:page": {
"styleext": "scss" "styleext": "scss"
},
"@schematics/angular:component": {
"type": "component"
},
"@schematics/angular:directive": {
"type": "directive"
},
"@schematics/angular:service": {
"type": "service"
},
"@schematics/angular:guard": {
"typeSeparator": "."
},
"@schematics/angular:interceptor": {
"typeSeparator": "."
},
"@schematics/angular:module": {
"typeSeparator": "."
},
"@schematics/angular:pipe": {
"typeSeparator": "."
},
"@schematics/angular:resolver": {
"typeSeparator": "."
} }
} }
} }
+1 -1
View File
@@ -3,7 +3,7 @@ import {CapacitorConfig} from '@capacitor/cli';
const config: CapacitorConfig = { const config: CapacitorConfig = {
appId: 'de.anyschool.app', appId: 'de.anyschool.app',
appName: 'StApps', appName: 'StApps',
webDir: 'www/browser', webDir: 'www',
cordova: { cordova: {
preferences: { preferences: {
'AndroidXEnabled': 'true', 'AndroidXEnabled': 'true',
-1
View File
@@ -22,7 +22,6 @@ export default defineConfig({
mochaFile: 'coverage/integration-report-junit-[hash].xml', mochaFile: 'coverage/integration-report-junit-[hash].xml',
}, },
baseUrl: 'http://localhost:4200', baseUrl: 'http://localhost:4200',
injectDocumentDomain: true,
supportFile: 'cypress/support/index.ts', supportFile: 'cypress/support/index.ts',
videosFolder: 'cypress/videos', videosFolder: 'cypress/videos',
screenshotsFolder: 'cypress/screenshots', screenshotsFolder: 'cypress/screenshots',
@@ -175,6 +175,16 @@
"hisometry": { "hisometry": {
"authProvider": "default", "authProvider": "default",
"url": "https://his-self-service.rz.uni-frankfurt.de" "url": "https://his-self-service.rz.uni-frankfurt.de"
},
"daia": {
"url": "https://daia.hebis.de/DAIA2/UB_Frankfurt"
},
"hebisProxy": {
"url": "https://proxy.ub.uni-frankfurt.de/login?qurl="
},
"paia": {
"authProvider": "paia",
"url": "https://hds.hebis.de/paia/core"
} }
}, },
"plugins": { "plugins": {
@@ -183,6 +193,9 @@
}, },
"feedback": { "feedback": {
"urlPath": "/feedback" "urlPath": "/feedback"
},
"hebis-plugin": {
"urlPath": "/hebissearch"
} }
} }
}, },
@@ -216,6 +229,19 @@
} }
} }
}, },
{
"icon": "local_library",
"route": "/hebis-search",
"title": "library catalog",
"translations": {
"de": {
"title": "Bibliothekskatalog"
},
"en": {
"title": "library catalog"
}
}
},
{ {
"icon": "inventory_2", "icon": "inventory_2",
"route": "/catalog", "route": "/catalog",
@@ -273,7 +299,7 @@
"icon": "school", "icon": "school",
"items": [ "items": [
{ {
"icon": "star", "icon": "grade",
"route": "/favorites", "route": "/favorites",
"title": "favorites", "title": "favorites",
"translations": { "translations": {
@@ -298,6 +324,20 @@
} }
} }
}, },
{
"authProvider": "paia",
"icon": "badge",
"route": "/library-account",
"title": "library account",
"translations": {
"de": {
"title": "Bibliothekskonto"
},
"en": {
"title": "library account"
}
}
},
{ {
"icon": "settings", "icon": "settings",
"route": "/settings", "route": "/settings",
@@ -433,6 +473,24 @@
"token": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/accessToken", "token": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/accessToken",
"userinfo": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/profile" "userinfo": "https://cas.rz.uni-frankfurt.de/cas/oauth2.0/profile"
} }
},
"paia": {
"client": {
"clientId": "",
"scopes": "",
"url": "https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php"
},
"endpoints": {
"authorization": "https://hds.hebis.de/Shibboleth.sso/UBFFM?target=https://hds.hebis.de/ubffm/paia_login_stub.php",
"endSession": "https://ubffm.hds.hebis.de/Shibboleth.sso/Logout",
"mapping": {
"id": "$.email",
"name": "$.name",
"role": "$.type"
},
"token": "https://hds.hebis.de/paia/auth/login",
"userinfo": "https://hds.hebis.de/paia/core"
}
} }
}, },
"backend": { "backend": {
@@ -14,8 +14,6 @@
*/ */
describe('context menu', function () { describe('context menu', function () {
const contextMenuSelector = 'stapps-context-menu-modal';
beforeEach(function () { beforeEach(function () {
cy.interceptSearch({ cy.interceptSearch({
extends: {query: 'a'}, extends: {query: 'a'},
@@ -31,25 +29,25 @@ describe('context menu', function () {
cy.patchSearchPage(); cy.patchSearchPage();
cy.get('ion-searchbar').type('a'); cy.get('ion-searchbar').type('a');
cy.wait('@search'); cy.wait('@search');
cy.get('ion-toolbar > ion-menu-button').click(); cy.get('ion-searchbar > ion-menu-button').click();
}); });
it('should sort', function () { it('should sort', function () {
cy.get(contextMenuSelector).within(() => { cy.get('stapps-context').within(() => {
cy.contains('ion-item', 'Name').click(); cy.contains('ion-item', 'Name').click();
cy.wait('@search'); cy.wait('@search');
}); });
}); });
it('should filter', function () { it('should filter', function () {
cy.get(contextMenuSelector).within(() => { cy.get('stapps-context').within(() => {
cy.contains('ion-item', '(17) Akademische Veranstaltung').click(); cy.contains('ion-item', '(17) Akademische Veranstaltung').click();
cy.wait('@search'); cy.wait('@search');
}); });
}); });
it('should have a working delete button', function () { it('should have a working delete button', function () {
cy.get(contextMenuSelector).within(() => { cy.get('stapps-context').within(() => {
cy.contains('ion-item', '(17) Akademische Veranstaltung').click(); cy.contains('ion-item', '(17) Akademische Veranstaltung').click();
cy.get('.checkbox-checked').should('have.length', 1); cy.get('.checkbox-checked').should('have.length', 1);
@@ -62,7 +60,7 @@ describe('context menu', function () {
it('should truncate long category items', function () { it('should truncate long category items', function () {
cy.contains('ion-list', 'Akademische Veranstaltung / Kategorien').within(() => { cy.contains('ion-list', 'Akademische Veranstaltung / Kategorien').within(() => {
cy.contains('ion-item', '(1) Tutorium').should('not.exist'); cy.contains('ion-item', '(1) Tutorium').should('not.exist');
cy.get('ion-button').click(); cy.get('div > ion-button').click();
cy.contains('ion-item', '(1) Tutorium').should('exist'); cy.contains('ion-item', '(1) Tutorium').should('exist');
}); });
}); });
@@ -33,9 +33,9 @@ describe('dashboard', async function () {
describe('schedule section', function () { describe('schedule section', function () {
it('should lead to the week overview', function () { it('should lead to the week overview', function () {
cy.get('.schedule') cy.get('.schedule')
.contains('a', /Wochen.*ansicht/) .contains('a', /Wochen.*übersicht/)
.click(); .click();
cy.url().should('include', '/schedule/weekly-view'); cy.url().should('include', '/schedule/week-overview');
}); });
it('should lead to the calendar', function () { it('should lead to the calendar', function () {
@@ -41,8 +41,8 @@ describe('favorites', function () {
}); });
cy.get('stapps-favorite-button').click(); cy.get('stapps-favorite-button').click();
cy.get('stapps-favorite-button > ion-button > ion-icon') cy.get('stapps-favorite-button > ion-button > ion-icon')
.invoke('attr', 'class') .invoke('attr', 'ng-reflect-fill')
.should('eq', 'selected'); .should('eq', 'true');
}); });
cy.visit('/favorites'); cy.visit('/favorites');
cy.get('stapps-data-list-item').within(() => { cy.get('stapps-data-list-item').within(() => {
@@ -100,7 +100,7 @@ describe('schedule', function () {
cy.get('ion-searchbar').click().type('a'); cy.get('ion-searchbar').click().type('a');
cy.wait('@search'); cy.wait('@search');
cy.wait('@chips'); cy.wait('@chips');
cy.wait(1000); cy.wait(200);
cy.contains('ion-item', 'UNIcert (Test)') cy.contains('ion-item', 'UNIcert (Test)')
.contains('stapps-add-event-action-chip', 'Termine Auswählen') .contains('stapps-add-event-action-chip', 'Termine Auswählen')
.click(); .click();
@@ -16,8 +16,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import equal from 'fast-deep-equal'; import equal from 'fast-deep-equal';
import {extendsDeepEqual} from '@openstapps/collection-utils'; import {extendsDeepEqual} from '@openstapps/collection-utils';
import {CORE_VERSION, SCIndexResponse, SCSearchRequest, SCSearchResponse} from '@openstapps/core'; import {SCSearchRequest, SCSearchResponse} from '@openstapps/core';
import * as defaultConfig from '../../fixtures/config/default-config.json';
type InterceptArguments = { type InterceptArguments = {
fixture?: string | SCSearchResponse | ((request: SCSearchRequest) => SCSearchResponse); fixture?: string | SCSearchResponse | ((request: SCSearchRequest) => SCSearchResponse);
@@ -35,12 +34,7 @@ type InterceptArguments = {
* *
*/ */
export function interceptConfig(config?: string) { export function interceptConfig(config?: string) {
let localConfig: SCIndexResponse = defaultConfig as unknown as SCIndexResponse; cy.intercept({url: '/', method: 'POST'}, {fixture: config || 'config/default-config.json'}).as('config');
localConfig.backend.SCVersion = CORE_VERSION;
cy.intercept(
{url: '/', method: 'POST'},
config ? {fixture: config} : {body: JSON.stringify(localConfig)},
).as('config');
} }
/** /**
+2 -2
View File
@@ -20,7 +20,7 @@ const config = {
htmlGlob: 'src/**/*.html', htmlGlob: 'src/**/*.html',
scriptGlob: 'src/**/*.ts', scriptGlob: 'src/**/*.ts',
additionalIcons: { additionalIcons: {
about: ['copyright', 'campaign', 'policy', 'description', 'text_snippet', 'expand_more', 'expand_all'], about: ['copyright', 'campaign', 'policy', 'description', 'text_snippet'],
navigation: [ navigation: [
'home', 'home',
'newspaper', 'newspaper',
@@ -30,7 +30,7 @@ const config = {
'local_library', 'local_library',
'inventory_2', 'inventory_2',
'map', 'map',
'star', 'grade',
'account_circle', 'account_circle',
'settings', 'settings',
'info', 'info',
+3 -3
View File
@@ -1,11 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
rm coverage/integration-report-junit-*.xml || true rm coverage/integration-report-junit-*.xml
ng e2e --watch=false --headless=true --browser="$BROWSER" ng e2e --watch=false --headless=true --browser="$BROWSER"
exit_code=$? exit_code=$?
jrm coverage/integration-report-junit.xml coverage/integration-report-junit-*.xml || true jrm coverage/integration-report-junit.xml coverage/integration-report-junit-*.xml
rm coverage/integration-report-junit-*.xml || true rm coverage/integration-report-junit-*.xml
exit $exit_code exit $exit_code
-3
View File
@@ -1,6 +1,5 @@
App/build App/build
App/Pods App/Pods
App/output
App/App/public App/App/public
DerivedData DerivedData
xcuserdata xcuserdata
@@ -8,5 +7,3 @@ xcuserdata
# Cordova plugins for Capacitor # Cordova plugins for Capacitor
capacitor-cordova-ios-plugins capacitor-cordova-ios-plugins
# Generated Config files
App/App/capacitor.config.json
@@ -14,8 +14,7 @@
504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; };
504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; };
50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; };
9582B6852FE996820072D4E8 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9582B6842FE996800072D4E8 /* SceneDelegate.swift */; }; 88B0D35EB4B7888A415041EE /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C462D51B10BE605A8502F2C /* Pods_App.framework */; };
A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
@@ -28,10 +27,10 @@
504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = "<group>"; }; 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = "<group>"; };
9582B6842FE996800072D4E8 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; 7C462D51B10BE605A8502F2C /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; };
AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E2D249FB277CB255005492AC /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = "<group>"; };
AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = "<group>"; }; EA601541CA9010D807358964 /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = "<group>"; };
FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = "<group>"; }; EB81CB8CD78E2A93A8154B20 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@@ -39,28 +38,20 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, 88B0D35EB4B7888A415041EE /* Pods_App.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = {
isa = PBXGroup;
children = (
AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
504EC2FB1FED79650016851F = { 504EC2FB1FED79650016851F = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
504EC3061FED79650016851F /* App */, 504EC3061FED79650016851F /* App */,
504EC3051FED79650016851F /* Products */, 504EC3051FED79650016851F /* Products */,
7F8756D8B27F46E3366F6CEA /* Pods */, 93DA7B5AF35933F9EF51EE34 /* Pods */,
27E2DDA53C4D2A4D1A88CE4A /* Frameworks */, 819423158BC1FAAD85B02762 /* Frameworks */,
); );
sourceTree = "<group>"; sourceTree = "<group>";
}; };
@@ -75,7 +66,7 @@
504EC3061FED79650016851F /* App */ = { 504EC3061FED79650016851F /* App */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
9582B6842FE996800072D4E8 /* SceneDelegate.swift */, E2D249FB277CB255005492AC /* App.entitlements */,
50379B222058CBB4000EE86E /* capacitor.config.json */, 50379B222058CBB4000EE86E /* capacitor.config.json */,
504EC3071FED79650016851F /* AppDelegate.swift */, 504EC3071FED79650016851F /* AppDelegate.swift */,
504EC30B1FED79650016851F /* Main.storyboard */, 504EC30B1FED79650016851F /* Main.storyboard */,
@@ -88,13 +79,22 @@
path = App; path = App;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
7F8756D8B27F46E3366F6CEA /* Pods */ = { 819423158BC1FAAD85B02762 /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */, 7C462D51B10BE605A8502F2C /* Pods_App.framework */,
AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */, );
name = Frameworks;
sourceTree = "<group>";
};
93DA7B5AF35933F9EF51EE34 /* Pods */ = {
isa = PBXGroup;
children = (
EA601541CA9010D807358964 /* Pods-App.debug.xcconfig */,
EB81CB8CD78E2A93A8154B20 /* Pods-App.release.xcconfig */,
); );
name = Pods; name = Pods;
path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
/* End PBXGroup section */ /* End PBXGroup section */
@@ -104,11 +104,11 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */;
buildPhases = ( buildPhases = (
6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */, 947055B15D65E7FC3ADB1FEB /* [CP] Check Pods Manifest.lock */,
504EC3001FED79650016851F /* Sources */, 504EC3001FED79650016851F /* Sources */,
504EC3011FED79650016851F /* Frameworks */, 504EC3011FED79650016851F /* Frameworks */,
504EC3021FED79650016851F /* Resources */, 504EC3021FED79650016851F /* Resources */,
9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */, F40DBF7576173B02228B7A71 /* [CP] Embed Pods Frameworks */,
); );
buildRules = ( buildRules = (
); );
@@ -125,8 +125,8 @@
504EC2FC1FED79650016851F /* Project object */ = { 504EC2FC1FED79650016851F /* Project object */ = {
isa = PBXProject; isa = PBXProject;
attributes = { attributes = {
LastSwiftUpdateCheck = 0920; LastSwiftUpdateCheck = 920;
LastUpgradeCheck = 0920; LastUpgradeCheck = 920;
TargetAttributes = { TargetAttributes = {
504EC3031FED79650016851F = { 504EC3031FED79650016851F = {
CreatedOnToolsVersion = 9.2; CreatedOnToolsVersion = 9.2;
@@ -144,8 +144,6 @@
Base, Base,
); );
mainGroup = 504EC2FB1FED79650016851F; mainGroup = 504EC2FB1FED79650016851F;
packageReferences = (
);
productRefGroup = 504EC3051FED79650016851F /* Products */; productRefGroup = 504EC3051FED79650016851F /* Products */;
projectDirPath = ""; projectDirPath = "";
projectRoot = ""; projectRoot = "";
@@ -172,16 +170,20 @@
/* End PBXResourcesBuildPhase section */ /* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = { 947055B15D65E7FC3ADB1FEB /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = (
);
inputPaths = ( inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock", "${PODS_ROOT}/Manifest.lock",
); );
name = "[CP] Check Pods Manifest.lock"; name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt",
); );
@@ -190,7 +192,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = { F40DBF7576173B02228B7A71 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@@ -213,7 +215,6 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
504EC3081FED79650016851F /* AppDelegate.swift in Sources */, 504EC3081FED79650016851F /* AppDelegate.swift in Sources */,
9582B6852FE996820072D4E8 /* SceneDelegate.swift in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -287,7 +288,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = YES; MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES; ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos; SDKROOT = iphoneos;
@@ -338,7 +339,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES; GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO; MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos; SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
@@ -348,7 +349,7 @@
}; };
504EC3171FED79650016851F /* Debug */ = { 504EC3171FED79650016851F /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */; baseConfigurationReference = EA601541CA9010D807358964 /* Pods-App.debug.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
@@ -356,7 +357,7 @@
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = YSGS9WV338; DEVELOPMENT_TEAM = YSGS9WV338;
INFOPLIST_FILE = App/Info.plist; INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = de.openstapps.app; PRODUCT_BUNDLE_IDENTIFIER = de.openstapps.app;
@@ -370,7 +371,7 @@
}; };
504EC3181FED79650016851F /* Release */ = { 504EC3181FED79650016851F /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */; baseConfigurationReference = EB81CB8CD78E2A93A8154B20 /* Pods-App.release.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = App/App.entitlements; CODE_SIGN_ENTITLEMENTS = App/App.entitlements;
@@ -378,7 +379,7 @@
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = YSGS9WV338; DEVELOPMENT_TEAM = YSGS9WV338;
INFOPLIST_FILE = App/Info.plist; INFOPLIST_FILE = App/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.0; IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = de.openstapps.app; PRODUCT_BUNDLE_IDENTIFIER = de.openstapps.app;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
+2 -11
View File
@@ -10,7 +10,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch. // Override point for customization after application launch.
let fetchManager = TSBackgroundFetch.sharedInstance(); let fetchManager = TSBackgroundFetch.sharedInstance();
fetchManager.didFinishLaunching(); fetchManager?.didFinishLaunching();
return true return true
} }
@@ -18,7 +18,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("BackgroundFetchPlugin AppDelegate received fetch event"); print("BackgroundFetchPlugin AppDelegate received fetch event");
let fetchManager = TSBackgroundFetch.sharedInstance(); let fetchManager = TSBackgroundFetch.sharedInstance();
fetchManager.perform(completionHandler: completionHandler, applicationState: application.applicationState); fetchManager?.perform(completionHandler: completionHandler, applicationState: application.applicationState);
} }
func applicationWillResignActive(_ application: UIApplication) { func applicationWillResignActive(_ application: UIApplication) {
@@ -56,13 +56,4 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler) return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
} }
func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration {
let config = UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
config.delegateClass = SceneDelegate.self
return config
}
} }
@@ -1,10 +1,10 @@
{ {
"images": [ "images": [
{ {
"filename" : "AppIcon-512@2x.png",
"idiom": "universal", "idiom": "universal",
"platform" : "ios", "size": "1024x1024",
"size" : "1024x1024" "filename": "AppIcon-512@2x.png",
"platform": "ios"
} }
], ],
"info": { "info": {
+3 -25
View File
@@ -44,29 +44,9 @@
<string>Calendar access is needed to sync your schedule with the device</string> <string>Calendar access is needed to sync your schedule with the device</string>
<key>NSLocationWhenInUseUsageDescription</key> <key>NSLocationWhenInUseUsageDescription</key>
<string>Location services are used to enable all map and search features</string> <string>Location services are used to enable all map and search features</string>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
<key>UIBackgroundModes</key> <key>UIBackgroundModes</key>
<array> <array>
<string>fetch</string> <string>fetch</string>
<string>processing</string>
</array> </array>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>
<string>LaunchScreen</string> <string>LaunchScreen</string>
@@ -81,17 +61,15 @@
<key>UISupportedInterfaceOrientations</key> <key>UISupportedInterfaceOrientations</key>
<array> <array>
<string>UIInterfaceOrientationPortrait</string> <string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array> </array>
<key>UISupportedInterfaceOrientations~ipad</key> <key>UISupportedInterfaceOrientations~ipad</key>
<array> <array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string> <string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string> <string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
</array> </array>
<key>UIViewControllerBasedStatusBarAppearance</key> <key>UIViewControllerBasedStatusBarAppearance</key>
<true/> <false/>
</dict> </dict>
</plist> </plist>
@@ -1,24 +0,0 @@
import UIKit
import Capacitor
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
window = UIWindow(windowScene: windowScene)
window?.rootViewController = CAPBridgeViewController()
window?.makeKeyAndVisible()
SceneDelegateProxy.shared.scene(scene, willConnectTo: session, options: connectionOptions)
}
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
SceneDelegateProxy.shared.scene(scene, openURLContexts: URLContexts)
}
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
SceneDelegateProxy.shared.scene(scene, continue: userActivity)
}
}
+20 -23
View File
@@ -1,6 +1,6 @@
require_relative '../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios/scripts/pods_helpers' require_relative '../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios/scripts/pods_helpers'
platform :ios, '15.0' platform :ios, '13.0'
use_frameworks! use_frameworks!
# workaround to avoid Xcode caching of Pods that requires # workaround to avoid Xcode caching of Pods that requires
@@ -9,27 +9,24 @@ use_frameworks!
install! 'cocoapods', :disable_input_output_paths => true install! 'cocoapods', :disable_input_output_paths => true
def capacitor_pods def capacitor_pods
pod 'Capacitor', :path => '../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios' pod 'Capacitor', :path => '../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios'
pod 'CapacitorCordova', :path => '../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios' pod 'CapacitorCordova', :path => '../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios'
pod 'CapacitorCommunityInAppReview', :path => '../../../../node_modules/.pnpm/@capacitor-community+in-app-review@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/in-app-review' pod 'CapacitorApp', :path => '../../../../node_modules/.pnpm/@capacitor+app@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/app'
pod 'CapacitorCommunityScreenBrightness', :path => '../../../../node_modules/.pnpm/@capacitor-community+screen-brightness@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/screen-brightness' pod 'CapacitorBrowser', :path => '../../../../node_modules/.pnpm/@capacitor+browser@5.1.0_@capacitor+core@5.5.0/node_modules/@capacitor/browser'
pod 'CapacitorApp', :path => '../../../../node_modules/.pnpm/@capacitor+app@8.1.1_@capacitor+core@8.5.2/node_modules/@capacitor/app' pod 'CapacitorClipboard', :path => '../../../../node_modules/.pnpm/@capacitor+clipboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/clipboard'
pod 'CapacitorBrowser', :path => '../../../../node_modules/.pnpm/@capacitor+browser@8.0.4_@capacitor+core@8.5.2/node_modules/@capacitor/browser' pod 'CapacitorDevice', :path => '../../../../node_modules/.pnpm/@capacitor+device@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/device'
pod 'CapacitorClipboard', :path => '../../../../node_modules/.pnpm/@capacitor+clipboard@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/clipboard' pod 'CapacitorDialog', :path => '../../../../node_modules/.pnpm/@capacitor+dialog@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/dialog'
pod 'CapacitorDevice', :path => '../../../../node_modules/.pnpm/@capacitor+device@8.0.3_@capacitor+core@8.5.2/node_modules/@capacitor/device' pod 'CapacitorFilesystem', :path => '../../../../node_modules/.pnpm/@capacitor+filesystem@5.1.4_@capacitor+core@5.5.0/node_modules/@capacitor/filesystem'
pod 'CapacitorDialog', :path => '../../../../node_modules/.pnpm/@capacitor+dialog@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/dialog' pod 'CapacitorGeolocation', :path => '../../../../node_modules/.pnpm/@capacitor+geolocation@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/geolocation'
pod 'CapacitorFilesystem', :path => '../../../../node_modules/.pnpm/@capacitor+filesystem@8.1.3_@capacitor+core@8.5.2/node_modules/@capacitor/filesystem' pod 'CapacitorHaptics', :path => '../../../../node_modules/.pnpm/@capacitor+haptics@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/haptics'
pod 'CapacitorGeolocation', :path => '../../../../node_modules/.pnpm/@capacitor+geolocation@8.2.2_@capacitor+core@8.5.2/node_modules/@capacitor/geolocation' pod 'CapacitorKeyboard', :path => '../../../../node_modules/.pnpm/@capacitor+keyboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/keyboard'
pod 'CapacitorHaptics', :path => '../../../../node_modules/.pnpm/@capacitor+haptics@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/haptics' pod 'CapacitorLocalNotifications', :path => '../../../../node_modules/.pnpm/@capacitor+local-notifications@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/local-notifications'
pod 'CapacitorKeyboard', :path => '../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.5_@capacitor+core@8.5.2/node_modules/@capacitor/keyboard' pod 'CapacitorNetwork', :path => '../../../../node_modules/.pnpm/@capacitor+network@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/network'
pod 'CapacitorLocalNotifications', :path => '../../../../node_modules/.pnpm/@capacitor+local-notifications@8.3.1_@capacitor+core@8.5.2/node_modules/@capacitor/local-notifications' pod 'CapacitorPreferences', :path => '../../../../node_modules/.pnpm/@capacitor+preferences@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/preferences'
pod 'CapacitorNetwork', :path => '../../../../node_modules/.pnpm/@capacitor+network@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/network' pod 'CapacitorShare', :path => '../../../../node_modules/.pnpm/@capacitor+share@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/share'
pod 'CapacitorPreferences', :path => '../../../../node_modules/.pnpm/@capacitor+preferences@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/preferences' pod 'CapacitorSplashScreen', :path => '../../../../node_modules/.pnpm/@capacitor+splash-screen@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/splash-screen'
pod 'CapacitorScreenOrientation', :path => '../../../../node_modules/.pnpm/@capacitor+screen-orientation@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/screen-orientation' pod 'TransistorsoftCapacitorBackgroundFetch', :path => '../../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@5.1.1_@capacitor+core@5.5.0/node_modules/@transistorsoft/capacitor-background-fetch'
pod 'CapacitorShare', :path => '../../../../node_modules/.pnpm/@capacitor+share@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/share' pod 'CapacitorSecureStoragePlugin', :path => '../../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.9.0_@capacitor+core@5.5.0/node_modules/capacitor-secure-storage-plugin'
pod 'CapacitorSplashScreen', :path => '../../../../node_modules/.pnpm/@capacitor+splash-screen@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/splash-screen'
pod 'TransistorsoftCapacitorBackgroundFetch', :path => '../../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@8.1.3_@capacitor+core@8.5.2/node_modules/@transistorsoft/capacitor-background-fetch'
pod 'CapacitorSecureStoragePlugin', :path => '../../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.13.0_@capacitor+core@8.5.2/node_modules/capacitor-secure-storage-plugin'
pod 'CordovaPlugins', :path => '../capacitor-cordova-ios-plugins' pod 'CordovaPlugins', :path => '../capacitor-cordova-ios-plugins'
end end
+76 -106
View File
@@ -1,161 +1,131 @@
PODS: PODS:
- Capacitor (8.5.2): - Capacitor (5.5.0):
- CapacitorCordova - CapacitorCordova
- CapacitorApp (8.1.1): - CapacitorApp (5.0.6):
- Capacitor - Capacitor
- CapacitorBrowser (8.0.4): - CapacitorBrowser (5.1.0):
- Capacitor - Capacitor
- CapacitorClipboard (8.0.1): - CapacitorClipboard (5.0.6):
- Capacitor - Capacitor
- CapacitorCommunityInAppReview (8.0.0): - CapacitorCordova (5.5.0)
- CapacitorDevice (5.0.6):
- Capacitor - Capacitor
- CapacitorCommunityScreenBrightness (8.0.0): - CapacitorDialog (5.0.6):
- Capacitor - Capacitor
- CapacitorCordova (8.5.2) - CapacitorFilesystem (5.1.4):
- CapacitorDevice (8.0.3):
- Capacitor - Capacitor
- CapacitorDialog (8.0.1): - CapacitorGeolocation (5.0.6):
- Capacitor - Capacitor
- CapacitorFilesystem (8.1.3): - CapacitorHaptics (5.0.6):
- Capacitor - Capacitor
- IONFilesystemLib (~> 1.1.1) - CapacitorKeyboard (5.0.6):
- CapacitorGeolocation (8.2.2):
- Capacitor - Capacitor
- IONGeolocationLib (= 2.1.0) - CapacitorLocalNotifications (5.0.6):
- CapacitorHaptics (8.0.2):
- Capacitor - Capacitor
- CapacitorKeyboard (8.0.5): - CapacitorNetwork (5.0.6):
- Capacitor - Capacitor
- CapacitorLocalNotifications (8.3.1): - CapacitorPreferences (5.0.6):
- Capacitor - Capacitor
- CapacitorNetwork (8.0.1): - CapacitorSecureStoragePlugin (0.9.0):
- Capacitor
- CapacitorPreferences (8.0.1):
- Capacitor
- CapacitorScreenOrientation (8.0.1):
- Capacitor
- CapacitorSecureStoragePlugin (0.13.0):
- Capacitor - Capacitor
- SwiftKeychainWrapper - SwiftKeychainWrapper
- CapacitorShare (8.0.2): - CapacitorShare (5.0.6):
- Capacitor - Capacitor
- CapacitorSplashScreen (8.0.2): - CapacitorSplashScreen (5.0.6):
- Capacitor - Capacitor
- CordovaPlugins (8.5.2): - CordovaPlugins (5.5.0):
- CapacitorCordova - CapacitorCordova
- IONFilesystemLib (1.1.4)
- IONGeolocationLib (2.1.0)
- SwiftKeychainWrapper (4.0.1) - SwiftKeychainWrapper (4.0.1)
- TransistorsoftCapacitorBackgroundFetch (8.1.3): - TransistorsoftCapacitorBackgroundFetch (5.1.1):
- Capacitor - Capacitor
- TSBackgroundFetch (~> 4.1.0)
- TSBackgroundFetch (4.1.1)
DEPENDENCIES: DEPENDENCIES:
- "Capacitor (from `../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios`)" - "Capacitor (from `../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios`)"
- "CapacitorApp (from `../../../../node_modules/.pnpm/@capacitor+app@8.1.1_@capacitor+core@8.5.2/node_modules/@capacitor/app`)" - "CapacitorApp (from `../../../../node_modules/.pnpm/@capacitor+app@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/app`)"
- "CapacitorBrowser (from `../../../../node_modules/.pnpm/@capacitor+browser@8.0.4_@capacitor+core@8.5.2/node_modules/@capacitor/browser`)" - "CapacitorBrowser (from `../../../../node_modules/.pnpm/@capacitor+browser@5.1.0_@capacitor+core@5.5.0/node_modules/@capacitor/browser`)"
- "CapacitorClipboard (from `../../../../node_modules/.pnpm/@capacitor+clipboard@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/clipboard`)" - "CapacitorClipboard (from `../../../../node_modules/.pnpm/@capacitor+clipboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/clipboard`)"
- "CapacitorCommunityInAppReview (from `../../../../node_modules/.pnpm/@capacitor-community+in-app-review@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/in-app-review`)" - "CapacitorCordova (from `../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios`)"
- "CapacitorCommunityScreenBrightness (from `../../../../node_modules/.pnpm/@capacitor-community+screen-brightness@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/screen-brightness`)" - "CapacitorDevice (from `../../../../node_modules/.pnpm/@capacitor+device@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/device`)"
- "CapacitorCordova (from `../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios`)" - "CapacitorDialog (from `../../../../node_modules/.pnpm/@capacitor+dialog@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/dialog`)"
- "CapacitorDevice (from `../../../../node_modules/.pnpm/@capacitor+device@8.0.3_@capacitor+core@8.5.2/node_modules/@capacitor/device`)" - "CapacitorFilesystem (from `../../../../node_modules/.pnpm/@capacitor+filesystem@5.1.4_@capacitor+core@5.5.0/node_modules/@capacitor/filesystem`)"
- "CapacitorDialog (from `../../../../node_modules/.pnpm/@capacitor+dialog@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/dialog`)" - "CapacitorGeolocation (from `../../../../node_modules/.pnpm/@capacitor+geolocation@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/geolocation`)"
- "CapacitorFilesystem (from `../../../../node_modules/.pnpm/@capacitor+filesystem@8.1.3_@capacitor+core@8.5.2/node_modules/@capacitor/filesystem`)" - "CapacitorHaptics (from `../../../../node_modules/.pnpm/@capacitor+haptics@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/haptics`)"
- "CapacitorGeolocation (from `../../../../node_modules/.pnpm/@capacitor+geolocation@8.2.2_@capacitor+core@8.5.2/node_modules/@capacitor/geolocation`)" - "CapacitorKeyboard (from `../../../../node_modules/.pnpm/@capacitor+keyboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/keyboard`)"
- "CapacitorHaptics (from `../../../../node_modules/.pnpm/@capacitor+haptics@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/haptics`)" - "CapacitorLocalNotifications (from `../../../../node_modules/.pnpm/@capacitor+local-notifications@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/local-notifications`)"
- "CapacitorKeyboard (from `../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.5_@capacitor+core@8.5.2/node_modules/@capacitor/keyboard`)" - "CapacitorNetwork (from `../../../../node_modules/.pnpm/@capacitor+network@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/network`)"
- "CapacitorLocalNotifications (from `../../../../node_modules/.pnpm/@capacitor+local-notifications@8.3.1_@capacitor+core@8.5.2/node_modules/@capacitor/local-notifications`)" - "CapacitorPreferences (from `../../../../node_modules/.pnpm/@capacitor+preferences@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/preferences`)"
- "CapacitorNetwork (from `../../../../node_modules/.pnpm/@capacitor+network@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/network`)" - "CapacitorSecureStoragePlugin (from `../../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.9.0_@capacitor+core@5.5.0/node_modules/capacitor-secure-storage-plugin`)"
- "CapacitorPreferences (from `../../../../node_modules/.pnpm/@capacitor+preferences@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/preferences`)" - "CapacitorShare (from `../../../../node_modules/.pnpm/@capacitor+share@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/share`)"
- "CapacitorScreenOrientation (from `../../../../node_modules/.pnpm/@capacitor+screen-orientation@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/screen-orientation`)" - "CapacitorSplashScreen (from `../../../../node_modules/.pnpm/@capacitor+splash-screen@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/splash-screen`)"
- "CapacitorSecureStoragePlugin (from `../../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.13.0_@capacitor+core@8.5.2/node_modules/capacitor-secure-storage-plugin`)"
- "CapacitorShare (from `../../../../node_modules/.pnpm/@capacitor+share@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/share`)"
- "CapacitorSplashScreen (from `../../../../node_modules/.pnpm/@capacitor+splash-screen@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/splash-screen`)"
- CordovaPlugins (from `../capacitor-cordova-ios-plugins`) - CordovaPlugins (from `../capacitor-cordova-ios-plugins`)
- "TransistorsoftCapacitorBackgroundFetch (from `../../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@8.1.3_@capacitor+core@8.5.2/node_modules/@transistorsoft/capacitor-background-fetch`)" - "TransistorsoftCapacitorBackgroundFetch (from `../../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@5.1.1_@capacitor+core@5.5.0/node_modules/@transistorsoft/capacitor-background-fetch`)"
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- IONFilesystemLib
- IONGeolocationLib
- SwiftKeychainWrapper - SwiftKeychainWrapper
- TSBackgroundFetch
EXTERNAL SOURCES: EXTERNAL SOURCES:
Capacitor: Capacitor:
:path: "../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios" :path: "../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios"
CapacitorApp: CapacitorApp:
:path: "../../../../node_modules/.pnpm/@capacitor+app@8.1.1_@capacitor+core@8.5.2/node_modules/@capacitor/app" :path: "../../../../node_modules/.pnpm/@capacitor+app@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/app"
CapacitorBrowser: CapacitorBrowser:
:path: "../../../../node_modules/.pnpm/@capacitor+browser@8.0.4_@capacitor+core@8.5.2/node_modules/@capacitor/browser" :path: "../../../../node_modules/.pnpm/@capacitor+browser@5.1.0_@capacitor+core@5.5.0/node_modules/@capacitor/browser"
CapacitorClipboard: CapacitorClipboard:
:path: "../../../../node_modules/.pnpm/@capacitor+clipboard@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/clipboard" :path: "../../../../node_modules/.pnpm/@capacitor+clipboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/clipboard"
CapacitorCommunityInAppReview:
:path: "../../../../node_modules/.pnpm/@capacitor-community+in-app-review@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/in-app-review"
CapacitorCommunityScreenBrightness:
:path: "../../../../node_modules/.pnpm/@capacitor-community+screen-brightness@8.0.0_@capacitor+core@8.5.2/node_modules/@capacitor-community/screen-brightness"
CapacitorCordova: CapacitorCordova:
:path: "../../../../node_modules/.pnpm/@capacitor+ios@8.5.2_@capacitor+core@8.5.2/node_modules/@capacitor/ios" :path: "../../../../node_modules/.pnpm/@capacitor+ios@5.5.0_@capacitor+core@5.5.0/node_modules/@capacitor/ios"
CapacitorDevice: CapacitorDevice:
:path: "../../../../node_modules/.pnpm/@capacitor+device@8.0.3_@capacitor+core@8.5.2/node_modules/@capacitor/device" :path: "../../../../node_modules/.pnpm/@capacitor+device@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/device"
CapacitorDialog: CapacitorDialog:
:path: "../../../../node_modules/.pnpm/@capacitor+dialog@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/dialog" :path: "../../../../node_modules/.pnpm/@capacitor+dialog@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/dialog"
CapacitorFilesystem: CapacitorFilesystem:
:path: "../../../../node_modules/.pnpm/@capacitor+filesystem@8.1.3_@capacitor+core@8.5.2/node_modules/@capacitor/filesystem" :path: "../../../../node_modules/.pnpm/@capacitor+filesystem@5.1.4_@capacitor+core@5.5.0/node_modules/@capacitor/filesystem"
CapacitorGeolocation: CapacitorGeolocation:
:path: "../../../../node_modules/.pnpm/@capacitor+geolocation@8.2.2_@capacitor+core@8.5.2/node_modules/@capacitor/geolocation" :path: "../../../../node_modules/.pnpm/@capacitor+geolocation@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/geolocation"
CapacitorHaptics: CapacitorHaptics:
:path: "../../../../node_modules/.pnpm/@capacitor+haptics@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/haptics" :path: "../../../../node_modules/.pnpm/@capacitor+haptics@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/haptics"
CapacitorKeyboard: CapacitorKeyboard:
:path: "../../../../node_modules/.pnpm/@capacitor+keyboard@8.0.5_@capacitor+core@8.5.2/node_modules/@capacitor/keyboard" :path: "../../../../node_modules/.pnpm/@capacitor+keyboard@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/keyboard"
CapacitorLocalNotifications: CapacitorLocalNotifications:
:path: "../../../../node_modules/.pnpm/@capacitor+local-notifications@8.3.1_@capacitor+core@8.5.2/node_modules/@capacitor/local-notifications" :path: "../../../../node_modules/.pnpm/@capacitor+local-notifications@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/local-notifications"
CapacitorNetwork: CapacitorNetwork:
:path: "../../../../node_modules/.pnpm/@capacitor+network@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/network" :path: "../../../../node_modules/.pnpm/@capacitor+network@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/network"
CapacitorPreferences: CapacitorPreferences:
:path: "../../../../node_modules/.pnpm/@capacitor+preferences@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/preferences" :path: "../../../../node_modules/.pnpm/@capacitor+preferences@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/preferences"
CapacitorScreenOrientation:
:path: "../../../../node_modules/.pnpm/@capacitor+screen-orientation@8.0.1_@capacitor+core@8.5.2/node_modules/@capacitor/screen-orientation"
CapacitorSecureStoragePlugin: CapacitorSecureStoragePlugin:
:path: "../../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.13.0_@capacitor+core@8.5.2/node_modules/capacitor-secure-storage-plugin" :path: "../../../../node_modules/.pnpm/capacitor-secure-storage-plugin@0.9.0_@capacitor+core@5.5.0/node_modules/capacitor-secure-storage-plugin"
CapacitorShare: CapacitorShare:
:path: "../../../../node_modules/.pnpm/@capacitor+share@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/share" :path: "../../../../node_modules/.pnpm/@capacitor+share@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/share"
CapacitorSplashScreen: CapacitorSplashScreen:
:path: "../../../../node_modules/.pnpm/@capacitor+splash-screen@8.0.2_@capacitor+core@8.5.2/node_modules/@capacitor/splash-screen" :path: "../../../../node_modules/.pnpm/@capacitor+splash-screen@5.0.6_@capacitor+core@5.5.0/node_modules/@capacitor/splash-screen"
CordovaPlugins: CordovaPlugins:
:path: "../capacitor-cordova-ios-plugins" :path: "../capacitor-cordova-ios-plugins"
TransistorsoftCapacitorBackgroundFetch: TransistorsoftCapacitorBackgroundFetch:
:path: "../../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@8.1.3_@capacitor+core@8.5.2/node_modules/@transistorsoft/capacitor-background-fetch" :path: "../../../../node_modules/.pnpm/@transistorsoft+capacitor-background-fetch@5.1.1_@capacitor+core@5.5.0/node_modules/@transistorsoft/capacitor-background-fetch"
SPEC CHECKSUMS: SPEC CHECKSUMS:
Capacitor: 89067779e14fb7ea56af07b4817f45d1f0c2a269 Capacitor: 57890b363df14d5d2d5d8461aa23e886cb34da2a
CapacitorApp: 305bd13c44f6f9d164e2ee66a4faa956ed8c0e06 CapacitorApp: 024e1b1bea5f883d79f6330d309bc441c88ad04a
CapacitorBrowser: 752e0208aa07c7aa63d1f7cde895a3e9519b2656 CapacitorBrowser: 7a0fb6a1011abfaaf2dfedfd8248f942a8eda3d6
CapacitorClipboard: c75fdaa6e622111119f35e7914ecfc67b05efecb CapacitorClipboard: 77edf49827ea21da2a9c05c690a4a6a4d07199c4
CapacitorCommunityInAppReview: 4492bdd34aad4d27ed87949376022cc93b294ea1 CapacitorCordova: 3d3908a3d208a11a75f9df3b18c4405c4de76e1d
CapacitorCommunityScreenBrightness: e4075e1181f7e88259edb8b1e3b9a209e1144d45 CapacitorDevice: 2c968f98a1ec4d22357418c1521e7ddc46c675e6
CapacitorCordova: 5bec5648cbd09a176ce34ce5e7b6cdabb2c8a327 CapacitorDialog: 0f3c15dfe9414b83bc64aef4078f1b92bcfead26
CapacitorDevice: 708e742b60a61572cd593e44c809592e8f31da14 CapacitorFilesystem: af704badfbc69f6f8623d9ed313e5490e3723dcb
CapacitorDialog: 854c5dac405081cae697c177ca43bcaa95ae67bf CapacitorGeolocation: 7be5f77abc205c0efe319fff8587a7183e7b0240
CapacitorFilesystem: b2bbd84bb91c177906c9dbc252864cb71ab9957b CapacitorHaptics: 1fffc1217c7e64a472d7845be50fb0c2f7d4204c
CapacitorGeolocation: 327f18983c8f8a55e191fcf7dee80b9294f1ab78 CapacitorKeyboard: b978154b024a5f65e044908e37d15b7de58b9d12
CapacitorHaptics: 296f771ecd89c7a1bd92a7b6826a7d268e2e70f5 CapacitorLocalNotifications: c2d8b14794064fd4814b1d6c4ddbac8029afa295
CapacitorKeyboard: b6b0744890cdb1d9a96e2cafcc9253fdcc55de3b CapacitorNetwork: d80b3e79bef6ec37640ee2806c19771f07ff2d0c
CapacitorLocalNotifications: e0747a329ddde3074d52dc74a003688af90e42be CapacitorPreferences: f03954bcb0ff09c792909e46bff88e3183c16b10
CapacitorNetwork: 8812ce60d11fb63d8f2e4ba51a49b2e59892ebe2 CapacitorSecureStoragePlugin: e91d7df060f2495a1acff9583641a6953e3aacba
CapacitorPreferences: cca2021f386efb75947c850334447d9ff22b14f1 CapacitorShare: cd41743331cb71d217c029de54b681cbd91e0fcc
CapacitorScreenOrientation: 6c3c84223ea1dd44aaa7184e2b416dd1192270d0 CapacitorSplashScreen: 5fa2ab5e46cf5cc530cf16a51c80c7a986579ccd
CapacitorSecureStoragePlugin: d083ff28d9ba5bc74924b9bcf9754ea605016b63 CordovaPlugins: de5669381702d76ed5b1d442177a6a5fc3252a9d
CapacitorShare: 2fde721d06a6f83ff5c7578e6a91b190d341ac6a
CapacitorSplashScreen: 7bf61c2001557ff9e195e601c6b87344480d3c65
CordovaPlugins: 3508a47f9d91d1c38fa7ff41afa75e7226c9407b
IONFilesystemLib: e6610c2b260d15e4b9cb9d5e37a87095479b669e
IONGeolocationLib: 6a7b6f76063fb1b01cfb14fae7d0f526e3c9b271
SwiftKeychainWrapper: 807ba1d63c33a7d0613288512399cd1eda1e470c SwiftKeychainWrapper: 807ba1d63c33a7d0613288512399cd1eda1e470c
TransistorsoftCapacitorBackgroundFetch: 3fd1ea4cd2f6e8f512d366261b162c68b362e59a TransistorsoftCapacitorBackgroundFetch: ce4b3e01b898cef516e68485d2160a078016ee97
TSBackgroundFetch: 18918b6449a1e3f01eb0f5b44d6d79ce6160a5a5
PODFILE CHECKSUM: 47c2431c6197a6e8fdf2ace4f969ed028a0e002f PODFILE CHECKSUM: 229278f2c257e8ab555325c7115b2e187e8e628d
COCOAPODS: 1.16.2 COCOAPODS: 1.13.0
+84 -84
View File
@@ -1,7 +1,7 @@
{ {
"name": "@openstapps/app", "name": "@openstapps/app",
"description": "The generic app tailored to fulfill needs of German universities, written using Ionic Framework.", "description": "The generic app tailored to fulfill needs of German universities, written using Ionic Framework.",
"version": "4.0.5", "version": "3.2.0",
"private": true, "private": true,
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>", "author": "Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
@@ -14,9 +14,12 @@
"Thea Schöbl <dev@theaninova.de>" "Thea Schöbl <dev@theaninova.de>"
], ],
"scripts": { "scripts": {
"build": "pnpm check-icons && ng build --configuration=production --stats-json", "analyze": "webpack-bundle-analyzer www/stats.json",
"build": "pnpm check-icons && ng build --configuration=production --stats-json && webpack-bundle-analyzer www/stats.json --mode static --report www/bundle-info.html --no-open",
"build:analyze": "npm run build:stats && npm run analyze",
"build:android": "ionic capacitor build android --no-open && cd android && ./gradlew clean assemble && cd ..", "build:android": "ionic capacitor build android --no-open && cd android && ./gradlew clean assemble && cd ..",
"build:prod": "ng build --configuration=production", "build:prod": "ng build --configuration=production",
"build:stats": "ng build --configuration=production --stats-json",
"changelog": "conventional-changelog -p angular -i src/assets/about/CHANGELOG.md -s -r 0", "changelog": "conventional-changelog -p angular -i src/assets/about/CHANGELOG.md -s -r 0",
"check-icons": "node scripts/check-icon-correctness.mjs", "check-icons": "node scripts/check-icon-correctness.mjs",
"chromium:no-cors": "chromium --disable-web-security --user-data-dir=\".browser-data/chromium\"", "chromium:no-cors": "chromium --disable-web-security --user-data-dir=\".browser-data/chromium\"",
@@ -36,7 +39,8 @@
"lint": "ng lint && stylelint \"**/*.scss\"", "lint": "ng lint && stylelint \"**/*.scss\"",
"lint:fix": "eslint --fix -c .eslintrc.json --ignore-path .eslintignore --ext .ts,.html src/ && stylelint --fix \"**/*.scss\"", "lint:fix": "eslint --fix -c .eslintrc.json --ignore-path .eslintignore --ext .ts,.html src/ && stylelint --fix \"**/*.scss\"",
"minify-icons": "node scripts/minify-icon-font.mjs", "minify-icons": "node scripts/minify-icon-font.mjs",
"preview": "http-server www/browser --p 8101 -o", "postinstall": "jetify && echo \"skipping jetify in production mode\"",
"preview": "http-server www --p 8101 -o",
"push": "git push && git push origin \"v$npm_package_version\"", "push": "git push && git push origin \"v$npm_package_version\"",
"resources:ios": "capacitor-assets generate --ios --iconBackgroundColor $(grep -oE \"^@include ion-color\\(primary, #[a-fA-F0-9]{3,6}\" src/theme/colors.scss | grep -oE \"#[a-fA-F0-9]{3,6}\") --splashBackgroundColor $(grep -oE \"^@include ion-color\\(primary, #[a-fA-F0-9]{3,6}\" src/theme/colors.scss | grep -oE \"#[a-fA-F0-9]{3,6}\")", "resources:ios": "capacitor-assets generate --ios --iconBackgroundColor $(grep -oE \"^@include ion-color\\(primary, #[a-fA-F0-9]{3,6}\" src/theme/colors.scss | grep -oE \"#[a-fA-F0-9]{3,6}\") --splashBackgroundColor $(grep -oE \"^@include ion-color\\(primary, #[a-fA-F0-9]{3,6}\" src/theme/colors.scss | grep -oE \"#[a-fA-F0-9]{3,6}\")",
"run:android": "ionic capacitor run android --livereload --external", "run:android": "ionic capacitor run android --livereload --external",
@@ -48,139 +52,135 @@
"test:integration": "sh integration-test.sh" "test:integration": "sh integration-test.sh"
}, },
"dependencies": { "dependencies": {
"@angular/animations": "20.3.31", "@angular/animations": "17.3.0",
"@angular/cdk": "20.2.14", "@angular/cdk": "17.3.0",
"@angular/common": "20.3.31", "@angular/common": "17.3.0",
"@angular/core": "20.3.31", "@angular/core": "17.3.0",
"@angular/forms": "20.3.31", "@angular/forms": "17.3.0",
"@angular/platform-browser": "20.3.31", "@angular/platform-browser": "17.3.0",
"@angular/router": "20.3.31", "@angular/router": "17.3.0",
"@awesome-cordova-plugins/calendar": "8.1.0", "@awesome-cordova-plugins/calendar": "6.6.0",
"@awesome-cordova-plugins/core": "8.1.0", "@awesome-cordova-plugins/core": "6.6.0",
"@capacitor-community/in-app-review": "8.0.0", "@capacitor/app": "5.0.7",
"@capacitor-community/screen-brightness": "8.0.0", "@capacitor/browser": "5.2.0",
"@capacitor/app": "8.1.1", "@capacitor/clipboard": "5.0.7",
"@capacitor/browser": "8.0.4", "@capacitor/core": "5.7.3",
"@capacitor/clipboard": "8.0.1", "@capacitor/device": "5.0.7",
"@capacitor/core": "8.5.2", "@capacitor/dialog": "5.0.7",
"@capacitor/device": "8.0.3", "@capacitor/filesystem": "5.2.1",
"@capacitor/dialog": "8.0.1", "@capacitor/geolocation": "5.0.7",
"@capacitor/filesystem": "8.1.3", "@capacitor/haptics": "5.0.7",
"@capacitor/geolocation": "8.2.2", "@capacitor/keyboard": "5.0.8",
"@capacitor/haptics": "8.0.2", "@capacitor/local-notifications": "5.0.7",
"@capacitor/keyboard": "8.0.5", "@capacitor/network": "5.0.7",
"@capacitor/local-notifications": "8.3.1", "@capacitor/preferences": "5.0.7",
"@capacitor/network": "8.0.1", "@capacitor/share": "5.0.7",
"@capacitor/preferences": "8.0.1", "@capacitor/splash-screen": "5.0.7",
"@capacitor/screen-orientation": "8.0.1", "@ionic-native/core": "5.36.0",
"@capacitor/share": "8.0.2", "@ionic/angular": "7.8.0",
"@capacitor/splash-screen": "8.0.2",
"@ionic/angular": "8.8.19",
"@ionic/angular-server": "8.8.19",
"@ionic/storage-angular": "4.0.0", "@ionic/storage-angular": "4.0.0",
"@maplibre/ngx-maplibre-gl": "22.1.0", "@maplibre/ngx-maplibre-gl": "17.4.1",
"@ngx-translate/core": "15.0.0", "@ngx-translate/core": "15.0.0",
"@ngx-translate/http-loader": "8.0.0", "@ngx-translate/http-loader": "8.0.0",
"@openid/appauth": "1.3.2", "@openid/appauth": "1.3.1",
"@openstapps/api": "workspace:*", "@openstapps/api": "workspace:*",
"@openstapps/collection-utils": "workspace:*", "@openstapps/collection-utils": "workspace:*",
"@openstapps/core": "workspace:*", "@openstapps/core": "workspace:*",
"@transistorsoft/capacitor-background-fetch": "8.1.3", "@transistorsoft/capacitor-background-fetch": "5.2.0",
"@types/dom-view-transitions": "1.0.6", "@types/dom-view-transitions": "1.0.4",
"capacitor-secure-storage-plugin": "0.13.0", "capacitor-secure-storage-plugin": "0.9.0",
"cordova-plugin-calendar": "5.1.6", "cordova-plugin-calendar": "5.1.6",
"date-fns": "3.6.0", "date-fns": "3.6.0",
"deepmerge": "4.3.1", "deepmerge": "4.3.1",
"form-data": "4.0.6", "form-data": "4.0.0",
"geojson": "0.5.0", "geojson": "0.5.0",
"ionic-appauth": "2.1.0", "ionic-appauth": "0.9.0",
"ionicons": "8.1.0", "jsonpath-plus": "6.0.1",
"jsonpath-plus": "10.3.0", "maplibre-gl": "4.0.2",
"maplibre-gl": "6.4.1",
"material-symbols": "0.17.1", "material-symbols": "0.17.1",
"moment": "2.30.1", "moment": "2.30.1",
"ngx-date-fns": "11.0.0", "ngx-date-fns": "11.0.0",
"ngx-logger": "5.0.12", "ngx-logger": "5.0.12",
"ngx-markdown": "18.1.0", "ngx-markdown": "17.1.1",
"ngx-moment": "6.0.2", "ngx-moment": "6.0.2",
"opening_hours": "3.8.0", "opening_hours": "3.8.0",
"pmtiles": "3.0.3", "pmtiles": "3.0.3",
"prettier": "3.1.1", "rxjs": "7.8.1",
"rxjs": "7.8.2",
"semver": "7.6.0", "semver": "7.6.0",
"swiper": "8.4.5", "swiper": "8.4.5",
"tslib": "2.6.2", "tslib": "2.6.2",
"zone.js": "0.16.2" "zone.js": "0.14.4"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/architect": "0.2003.37", "@angular-devkit/architect": "0.1703.0",
"@angular-devkit/build-angular": "20.3.37", "@angular-devkit/build-angular": "17.3.0",
"@angular-devkit/core": "20.3.37", "@angular-devkit/core": "17.3.0",
"@angular-devkit/schematics": "20.3.37", "@angular-devkit/schematics": "17.3.0",
"@angular-eslint/builder": "20.7.0", "@angular-eslint/builder": "17.3.0",
"@angular-eslint/eslint-plugin": "20.7.0", "@angular-eslint/eslint-plugin": "17.3.0",
"@angular-eslint/eslint-plugin-template": "20.7.0", "@angular-eslint/eslint-plugin-template": "17.3.0",
"@angular-eslint/schematics": "20.7.0", "@angular-eslint/schematics": "17.3.0",
"@angular-eslint/template-parser": "20.7.0", "@angular-eslint/template-parser": "17.3.0",
"@angular/cli": "20.3.37", "@angular/cli": "17.3.0",
"@angular/compiler": "20.3.31", "@angular/compiler": "17.3.0",
"@angular/compiler-cli": "20.3.31", "@angular/compiler-cli": "17.3.0",
"@angular/language-server": "20.3.0", "@angular/language-server": "17.3.0",
"@angular/language-service": "20.3.31", "@angular/language-service": "17.3.0",
"@angular/platform-browser-dynamic": "20.3.31", "@angular/platform-browser-dynamic": "17.3.0",
"@capacitor/android": "8.5.2", "@capacitor/android": "5.7.3",
"@capacitor/assets": "3.0.5", "@capacitor/assets": "3.0.4",
"@capacitor/cli": "8.5.2", "@capacitor/cli": "5.7.3",
"@capacitor/ios": "8.5.2", "@capacitor/ios": "5.7.3",
"@compodoc/compodoc": "1.2.1", "@compodoc/compodoc": "1.1.23",
"@cypress/schematic": "4.1.1", "@cypress/schematic": "2.5.1",
"@ionic/angular-toolkit": "12.3.0", "@ionic/angular-toolkit": "11.0.1",
"@ionic/cli": "7.2.1", "@ionic/cli": "7.2.0",
"@openstapps/prettier-config": "workspace:*", "@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*", "@openstapps/tsconfig": "workspace:*",
"@stylistic/eslint-plugin": "5.10.0", "@types/fontkit": "2.0.7",
"@types/fontkit": "2.0.9",
"@types/geojson": "1.0.6", "@types/geojson": "1.0.6",
"@types/glob": "8.1.0", "@types/glob": "8.1.0",
"@types/jasmine": "5.1.4", "@types/jasmine": "5.1.4",
"@types/jasminewd2": "2.0.13", "@types/jasminewd2": "2.0.13",
"@types/jsonpath": "0.2.0", "@types/jsonpath": "0.2.0",
"@types/karma": "6.3.9", "@types/karma": "6.3.8",
"@types/karma-coverage": "2.0.3", "@types/karma-coverage": "2.0.3",
"@types/karma-jasmine": "4.0.5", "@types/karma-jasmine": "4.0.5",
"@types/node": "22.15.31", "@types/node": "18.15.3",
"@types/semver": "7.5.8", "@types/semver": "7.5.8",
"@typescript-eslint/eslint-plugin": "8.39.1", "@typescript-eslint/eslint-plugin": "7.2.0",
"@typescript-eslint/parser": "8.39.1", "@typescript-eslint/parser": "7.2.0",
"cordova-res": "0.15.4", "cordova-res": "0.15.4",
"cypress": "15.0.0", "cypress": "13.7.0",
"eslint": "8.57.0", "eslint": "8.57.0",
"eslint-plugin-jsdoc": "48.2.1", "eslint-plugin-jsdoc": "48.2.1",
"eslint-plugin-prettier": "5.1.3", "eslint-plugin-prettier": "5.1.3",
"eslint-plugin-unicorn": "51.0.1", "eslint-plugin-unicorn": "51.0.1",
"fast-deep-equal": "3.1.3", "fast-deep-equal": "3.1.3",
"fontkit": "2.0.4", "fontkit": "2.0.2",
"glob": "10.5.0", "glob": "10.3.10",
"http-server": "14.1.1", "http-server": "14.1.1",
"is-docker": "2.2.1", "is-docker": "2.2.1",
"jasmine-core": "5.1.2", "jasmine-core": "5.1.2",
"jasmine-spec-reporter": "7.0.0", "jasmine-spec-reporter": "7.0.0",
"jetifier": "2.0.0",
"junit-report-merger": "6.0.3", "junit-report-merger": "6.0.3",
"karma": "6.4.4", "karma": "6.4.3",
"karma-chrome-launcher": "3.2.0", "karma-chrome-launcher": "3.2.0",
"karma-coverage": "2.2.1", "karma-coverage": "2.2.1",
"karma-jasmine": "5.1.0", "karma-jasmine": "5.1.0",
"karma-junit-reporter": "2.0.1", "karma-junit-reporter": "2.0.1",
"karma-mocha-reporter": "2.2.5", "karma-mocha-reporter": "2.2.5",
"license-checker": "25.0.1", "license-checker": "25.0.1",
"stylelint": "17.14.1", "stylelint": "16.3.1",
"stylelint-config-clean-order": "10.0.0", "stylelint-config-clean-order": "5.4.1",
"stylelint-config-prettier-scss": "1.0.0", "stylelint-config-prettier-scss": "1.0.0",
"stylelint-config-recommended-scss": "17.0.1", "stylelint-config-recommended-scss": "14.0.0",
"stylelint-config-standard-scss": "17.0.0", "stylelint-config-standard-scss": "13.0.0",
"surge": "0.23.1", "surge": "0.23.1",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "5.9.3" "typescript": "5.4.2",
"webpack-bundle-analyzer": "4.10.1"
}, },
"cordova": { "cordova": {
"plugins": {}, "plugins": {},
-8
View File
@@ -1,8 +0,0 @@
import {networkInterfaces} from 'os';
console.log(
Object.entries(networkInterfaces())
.map(([, info]) => info)
.flat()
.find(info => info && !info.internal && info.family === 'IPv4')?.address,
);
@@ -13,7 +13,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {HttpClient} from '@angular/common/http'; import {HttpClient} from '@angular/common/http';
import {Injectable, inject} from '@angular/core'; import {Injectable} from '@angular/core';
import { import {
SCAcademicEvent, SCAcademicEvent,
SCArticle, SCArticle,
@@ -395,9 +395,7 @@ export class SampleThings {
*/ */
http: HttpClient; http: HttpClient;
constructor() { constructor(http: HttpClient) {
const http = inject(HttpClient);
this.http = http; this.http = http;
} }
@@ -13,7 +13,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {Injectable, inject} from '@angular/core'; import {Injectable} from '@angular/core';
import {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse} from '@angular/common/http'; import {HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse} from '@angular/common/http';
import {Observable, throwError} from 'rxjs'; import {Observable, throwError} from 'rxjs';
import {NGXLogger} from 'ngx-logger'; import {NGXLogger} from 'ngx-logger';
@@ -21,7 +21,7 @@ import {catchError} from 'rxjs/operators';
@Injectable() @Injectable()
export class ServiceHandlerInterceptor implements HttpInterceptor { export class ServiceHandlerInterceptor implements HttpInterceptor {
private readonly logger = inject(NGXLogger); constructor(private readonly logger: NGXLogger) {}
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> { intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe( return next.handle(request).pipe(
+1 -1
View File
@@ -13,7 +13,7 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {AnimationBuilder, AnimationController} from '@ionic/angular/standalone'; import {AnimationBuilder, AnimationController} from '@ionic/angular';
import {AnimationOptions} from '@ionic/angular/common/providers/nav-controller'; import {AnimationOptions} from '@ionic/angular/common/providers/nav-controller';
import {iosDuration, iosEasing, mdDuration, mdEasing} from './easings'; import {iosDuration, iosEasing, mdDuration, mdEasing} from './easings';
@@ -26,7 +26,6 @@ const routes: Routes = [{path: '', redirectTo: '/overview', pathMatch: 'full'}];
RouterModule.forRoot(routes, { RouterModule.forRoot(routes, {
preloadingStrategy: PreloadAllModules, preloadingStrategy: PreloadAllModules,
errorHandler: error => { errorHandler: error => {
console.error(error);
// Handle unknown routes, at the moment this can only be done via window.location // Handle unknown routes, at the moment this can only be done via window.location
if (error.message.includes('Cannot match any routes')) { if (error.message.includes('Cannot match any routes')) {
window.location.href = '/overview'; window.location.href = '/overview';
+10 -11
View File
@@ -17,11 +17,11 @@
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
import {TestBed} from '@angular/core/testing'; import {TestBed} from '@angular/core/testing';
import {ModalController, Platform} from '@ionic/angular/standalone'; import {ModalController, Platform} from '@ionic/angular';
import {TranslateService} from '@ngx-translate/core'; import {TranslateService} from '@ngx-translate/core';
import {ThingTranslateService} from './translation/thing-translate.service'; import {ThingTranslateService} from './translation/thing-translate.service';
import {provideHttpClientTesting} from '@angular/common/http/testing'; import {HttpClientTestingModule} from '@angular/common/http/testing';
import {AppComponent} from './app.component'; import {AppComponent} from './app.component';
import {AuthModule} from './modules/auth/auth.module'; import {AuthModule} from './modules/auth/auth.module';
import {ConfigProvider} from './modules/config/config.provider'; import {ConfigProvider} from './modules/config/config.provider';
@@ -32,8 +32,6 @@ import {ScheduleSyncService} from './modules/background/schedule/schedule-sync.s
import {sampleAuthConfiguration} from './_helpers/data/sample-configuration'; import {sampleAuthConfiguration} from './_helpers/data/sample-configuration';
import {StorageProvider} from './modules/storage/storage.provider'; import {StorageProvider} from './modules/storage/storage.provider';
import {SimpleBrowser} from './util/browser.factory'; import {SimpleBrowser} from './util/browser.factory';
import {provideHttpClient, withInterceptorsFromDi} from '@angular/common/http';
import {InAppReviewProvider} from './modules/settings/in-app-review/in-app-review.provider';
describe('AppComponent', () => { describe('AppComponent', () => {
let platformReadySpy: any; let platformReadySpy: any;
@@ -41,7 +39,6 @@ describe('AppComponent', () => {
let translateServiceSpy: jasmine.SpyObj<TranslateService>; let translateServiceSpy: jasmine.SpyObj<TranslateService>;
let thingTranslateServiceSpy: jasmine.SpyObj<ThingTranslateService>; let thingTranslateServiceSpy: jasmine.SpyObj<ThingTranslateService>;
let settingsProvider: jasmine.SpyObj<SettingsProvider>; let settingsProvider: jasmine.SpyObj<SettingsProvider>;
let inAppReviewProvider: jasmine.SpyObj<InAppReviewProvider>;
let configProvider: jasmine.SpyObj<ConfigProvider>; let configProvider: jasmine.SpyObj<ConfigProvider>;
let ngxLogger: jasmine.SpyObj<NGXLogger>; let ngxLogger: jasmine.SpyObj<NGXLogger>;
let scheduleSyncServiceSpy: jasmine.SpyObj<ScheduleSyncService>; let scheduleSyncServiceSpy: jasmine.SpyObj<ScheduleSyncService>;
@@ -72,31 +69,27 @@ describe('AppComponent', () => {
configProvider.getAnyValue = jasmine.createSpy().and.callFake(function () { configProvider.getAnyValue = jasmine.createSpy().and.callFake(function () {
return sampleAuthConfiguration; return sampleAuthConfiguration;
}); });
inAppReviewProvider = jasmine.createSpyObj('InAppReviewProvider', ['init']);
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']); ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
storageProvider = jasmine.createSpyObj('StorageProvider', ['init', 'get', 'has', 'put']); storageProvider = jasmine.createSpyObj('StorageProvider', ['init', 'get', 'has', 'put']);
simpleBrowser = jasmine.createSpyObj('SimpleBrowser', ['open']); simpleBrowser = jasmine.createSpyObj('SimpleBrowser', ['open']);
modalController = jasmine.createSpyObj('ModalController', ['create', 'dismiss', 'getTop']); modalController = jasmine.createSpyObj('ModalController', ['create', 'dismiss', 'getTop']);
TestBed.configureTestingModule({ TestBed.configureTestingModule({
imports: [RouterTestingModule.withRoutes([]), HttpClientTestingModule, AuthModule],
declarations: [AppComponent], declarations: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
imports: [RouterTestingModule.withRoutes([]), AuthModule],
providers: [ providers: [
{provide: Platform, useValue: platformSpy}, {provide: Platform, useValue: platformSpy},
{provide: TranslateService, useValue: translateServiceSpy}, {provide: TranslateService, useValue: translateServiceSpy},
{provide: ThingTranslateService, useValue: thingTranslateServiceSpy}, {provide: ThingTranslateService, useValue: thingTranslateServiceSpy},
{provide: ScheduleSyncService, useValue: scheduleSyncServiceSpy}, {provide: ScheduleSyncService, useValue: scheduleSyncServiceSpy},
{provide: SettingsProvider, useValue: settingsProvider}, {provide: SettingsProvider, useValue: settingsProvider},
{provide: InAppReviewProvider, useValue: inAppReviewProvider},
{provide: ConfigProvider, useValue: configProvider}, {provide: ConfigProvider, useValue: configProvider},
{provide: NGXLogger, useValue: ngxLogger}, {provide: NGXLogger, useValue: ngxLogger},
{provide: StorageProvider, useValue: storageProvider}, {provide: StorageProvider, useValue: storageProvider},
{provide: SimpleBrowser, useValue: simpleBrowser}, {provide: SimpleBrowser, useValue: simpleBrowser},
{provide: ModalController, useValue: modalController}, {provide: ModalController, useValue: modalController},
provideHttpClient(withInterceptorsFromDi()),
provideHttpClientTesting(),
], ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents(); }).compileComponents();
}); });
@@ -109,5 +102,11 @@ describe('AppComponent', () => {
it('should initialize the app', async () => { it('should initialize the app', async () => {
TestBed.createComponent(AppComponent); TestBed.createComponent(AppComponent);
expect(platformSpy.ready).toHaveBeenCalled(); expect(platformSpy.ready).toHaveBeenCalled();
// await platformReadySpy;
// TODO: https://capacitorjs.com/docs/guides/mocking-plugins
// expect(splashScreenSpy.hide).toHaveBeenCalled();
}); });
// TODO: add more tests!
}); });
+16 -26
View File
@@ -12,12 +12,11 @@
* You should have received a copy of the GNU General Public License along with * You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {AfterContentInit, Component, NgZone, inject} from '@angular/core'; import {AfterContentInit, Component, NgZone} from '@angular/core';
import {Router} from '@angular/router'; import {Router} from '@angular/router';
import {App, URLOpenListenerEvent} from '@capacitor/app'; import {App, URLOpenListenerEvent} from '@capacitor/app';
import {Platform, ToastController} from '@ionic/angular/standalone'; import {Platform, ToastController} from '@ionic/angular';
import {SettingsProvider} from './modules/settings/settings.provider'; import {SettingsProvider} from './modules/settings/settings.provider';
import {InAppReviewProvider} from './modules/settings/in-app-review/in-app-review.provider';
import {AuthHelperService} from './modules/auth/auth-helper.service'; import {AuthHelperService} from './modules/auth/auth-helper.service';
import {environment} from '../environments/environment'; import {environment} from '../environments/environment';
import {Capacitor} from '@capacitor/core'; import {Capacitor} from '@capacitor/core';
@@ -32,27 +31,8 @@ import {SplashScreen} from '@capacitor/splash-screen';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
templateUrl: 'app.component.html', templateUrl: 'app.component.html',
standalone: false,
}) })
export class AppComponent implements AfterContentInit { export class AppComponent implements AfterContentInit {
private readonly platform = inject(Platform);
private readonly settingsProvider = inject(SettingsProvider);
private readonly inAppReviewProvider = inject(InAppReviewProvider);
private readonly router = inject(Router);
private readonly zone = inject(NgZone);
private readonly authHelper = inject(AuthHelperService);
private readonly toastController = inject(ToastController);
private readonly scheduleSyncService = inject(ScheduleSyncService);
private readonly versionService = inject(AppVersionService);
/** /**
* TODO * TODO
*/ */
@@ -72,7 +52,16 @@ export class AppComponent implements AfterContentInit {
*/ */
ommitedEventSources = ['ion-input', 'ion-searchbar']; ommitedEventSources = ['ion-input', 'ion-searchbar'];
constructor() { constructor(
private readonly platform: Platform,
private readonly settingsProvider: SettingsProvider,
private readonly router: Router,
private readonly zone: NgZone,
private readonly authHelper: AuthHelperService,
private readonly toastController: ToastController,
private readonly scheduleSyncService: ScheduleSyncService,
private readonly versionService: AppVersionService,
) {
void this.initializeApp(); void this.initializeApp();
} }
@@ -97,8 +86,6 @@ export class AppComponent implements AfterContentInit {
async hideSplash() { async hideSplash() {
if (Capacitor.isNativePlatform()) { if (Capacitor.isNativePlatform()) {
void SplashScreen.hide(); void SplashScreen.hide();
await this.inAppReviewProvider.increaseSessionCount();
void this.inAppReviewProvider.startInAppReviewIfFeasible();
} }
} }
@@ -130,8 +117,11 @@ export class AppComponent implements AfterContentInit {
private async authNotificationsInit() { private async authNotificationsInit() {
this.authHelper this.authHelper
.getProvider() .getProvider('default')
.events$.subscribe(action => this.showMessage(this.authHelper.getAuthMessage('default', action))); .events$.subscribe(action => this.showMessage(this.authHelper.getAuthMessage('default', action)));
this.authHelper
.getProvider('paia')
.events$.subscribe(action => this.showMessage(this.authHelper.getAuthMessage('paia', action)));
} }
private async showMessage(message?: string) { private async showMessage(message?: string) {
+17 -9
View File
@@ -13,12 +13,12 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {CommonModule, LocationStrategy, PathLocationStrategy, registerLocaleData} from '@angular/common'; import {CommonModule, LocationStrategy, PathLocationStrategy, registerLocaleData} from '@angular/common';
import {HTTP_INTERCEPTORS, HttpClient, provideHttpClient, withInterceptorsFromDi} from '@angular/common/http'; import {HTTP_INTERCEPTORS, HttpClient, HttpClientModule} from '@angular/common/http';
import localeDe from '@angular/common/locales/de'; import localeDe from '@angular/common/locales/de';
import {APP_INITIALIZER, NgModule, inject} from '@angular/core'; import {APP_INITIALIZER, NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import {RouteReuseStrategy} from '@angular/router'; import {RouteReuseStrategy} from '@angular/router';
import {IonicRouteStrategy, Platform, provideIonicAngular, IonApp} from '@ionic/angular/standalone'; import {IonicModule, IonicRouteStrategy, Platform} from '@ionic/angular';
import {TranslateLoader, TranslateModule, TranslateService} from '@ngx-translate/core'; import {TranslateLoader, TranslateModule, TranslateService} from '@ngx-translate/core';
import {TranslateHttpLoader} from '@ngx-translate/http-loader'; import {TranslateHttpLoader} from '@ngx-translate/http-loader';
import moment from 'moment'; import moment from 'moment';
@@ -33,6 +33,7 @@ import {CatalogModule} from './modules/catalog/catalog.module';
import {ConfigProvider} from './modules/config/config.provider'; import {ConfigProvider} from './modules/config/config.provider';
import {DashboardModule} from './modules/dashboard/dashboard.module'; import {DashboardModule} from './modules/dashboard/dashboard.module';
import {DataModule} from './modules/data/data.module'; import {DataModule} from './modules/data/data.module';
import {HebisModule} from './modules/hebis/hebis.module';
import {MapModule} from './modules/map/map.module'; import {MapModule} from './modules/map/map.module';
import {MenuModule} from './modules/menu/menu.module'; import {MenuModule} from './modules/menu/menu.module';
import {NewsModule} from './modules/news/news.module'; import {NewsModule} from './modules/news/news.module';
@@ -52,12 +53,15 @@ import {FeedbackModule} from './modules/feedback/feedback.module';
import {DebugDataCollectorService} from './modules/data/debug-data-collector.service'; import {DebugDataCollectorService} from './modules/data/debug-data-collector.service';
import {AuthModule} from './modules/auth/auth.module'; import {AuthModule} from './modules/auth/auth.module';
import {BackgroundModule} from './modules/background/background.module'; import {BackgroundModule} from './modules/background/background.module';
import {LibraryModule} from './modules/library/library.module';
import {StorageProvider} from './modules/storage/storage.provider'; import {StorageProvider} from './modules/storage/storage.provider';
import {AssessmentsModule} from './modules/assessments/assessments.module'; import {AssessmentsModule} from './modules/assessments/assessments.module';
import {ServiceHandlerInterceptor} from './_helpers/service-handler.interceptor'; import {ServiceHandlerInterceptor} from './_helpers/service-handler.interceptor';
import {RoutingStackService} from './util/routing-stack.service'; import {RoutingStackService} from './util/routing-stack.service';
import {SCLanguageCode, SCSettingValue} from '@openstapps/core'; import {SCLanguageCode, SCSettingValue} from '@openstapps/core';
import {DefaultAuthService} from './modules/auth/default-auth.service'; import {DefaultAuthService} from './modules/auth/default-auth.service';
import {PAIAAuthService} from './modules/auth/paia/paia-auth.service';
import {IonIconModule} from './util/ion-icon/ion-icon.module';
import {NavigationModule} from './modules/menu/navigation/navigation.module'; import {NavigationModule} from './modules/menu/navigation/navigation.module';
import {browserFactory, SimpleBrowser} from './util/browser.factory'; import {browserFactory, SimpleBrowser} from './util/browser.factory';
import {getDateFnsLocale} from './translation/dfns-locale'; import {getDateFnsLocale} from './translation/dfns-locale';
@@ -65,7 +69,7 @@ import {setDefaultOptions} from 'date-fns';
import {DateFnsConfigurationService} from 'ngx-date-fns'; import {DateFnsConfigurationService} from 'ngx-date-fns';
import {Capacitor} from '@capacitor/core'; import {Capacitor} from '@capacitor/core';
import {SplashScreen} from '@capacitor/splash-screen'; import {SplashScreen} from '@capacitor/splash-screen';
import * as maplibregl from 'maplibre-gl'; import maplibregl from 'maplibre-gl';
import {Protocol} from 'pmtiles'; import {Protocol} from 'pmtiles';
registerLocaleData(localeDe); registerLocaleData(localeDe);
@@ -83,11 +87,11 @@ export function initializerFactory(
translateService: TranslateService, translateService: TranslateService,
_routingStackService: RoutingStackService, _routingStackService: RoutingStackService,
defaultAuthService: DefaultAuthService, defaultAuthService: DefaultAuthService,
paiaAuthService: PAIAAuthService,
dateFnsConfigurationService: DateFnsConfigurationService, dateFnsConfigurationService: DateFnsConfigurationService,
) { ) {
return async () => { return async () => {
try { try {
maplibregl.setWorkerUrl(new URL('maplibre-gl-worker.mjs', document.baseURI).href);
maplibregl.addProtocol('pmtiles', new Protocol().tile); maplibregl.addProtocol('pmtiles', new Protocol().tile);
initLogger(logger); initLogger(logger);
await storageProvider.init(); await storageProvider.init();
@@ -112,6 +116,7 @@ export function initializerFactory(
dateFnsConfigurationService.setLocale(dateFnsLocale); dateFnsConfigurationService.setLocale(dateFnsLocale);
await defaultAuthService.init(); await defaultAuthService.init();
await paiaAuthService.init();
} catch (error) { } catch (error) {
logger.warn(error); logger.warn(error);
} }
@@ -150,8 +155,13 @@ export function createTranslateLoader(http: HttpClient) {
CommonModule, CommonModule,
DashboardModule, DashboardModule,
DataModule, DataModule,
HebisModule,
IonicModule.forRoot(),
IonIconModule,
JobModule, JobModule,
FavoritesModule, FavoritesModule,
LibraryModule,
HttpClientModule,
ProfilePageModule, ProfilePageModule,
FeedbackModule, FeedbackModule,
MapModule, MapModule,
@@ -175,7 +185,6 @@ export function createTranslateLoader(http: HttpClient) {
LoggerModule.forRoot({ LoggerModule.forRoot({
level: environment.production ? NgxLoggerLevel.FATAL : NgxLoggerLevel.TRACE, level: environment.production ? NgxLoggerLevel.FATAL : NgxLoggerLevel.TRACE,
}), }),
IonApp,
], ],
providers: [ providers: [
{ {
@@ -202,6 +211,7 @@ export function createTranslateLoader(http: HttpClient) {
TranslateService, TranslateService,
RoutingStackService, RoutingStackService,
DefaultAuthService, DefaultAuthService,
PAIAAuthService,
DateFnsConfigurationService, DateFnsConfigurationService,
], ],
useFactory: initializerFactory, useFactory: initializerFactory,
@@ -211,10 +221,8 @@ export function createTranslateLoader(http: HttpClient) {
useClass: ServiceHandlerInterceptor, useClass: ServiceHandlerInterceptor,
multi: true, multi: true,
}, },
provideIonicAngular(),
provideHttpClient(withInterceptorsFromDi()),
], ],
}) })
export class AppModule { export class AppModule {
debugDataCollectorService = inject(DebugDataCollectorService); constructor(public debugDataCollectorService: DebugDataCollectorService) {}
} }
@@ -13,16 +13,11 @@
* this program. If not, see <https://www.gnu.org/licenses/>. * this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; import {Component} from '@angular/core';
import {ConfigProvider} from '../config/config.provider';
@Component({ @Component({
selector: 'about-changelog', selector: 'about-changelog',
templateUrl: 'about-changelog.html', templateUrl: 'about-changelog.html',
styleUrls: ['about-changelog.scss', './about-page/about-page.scss', 'release-notes-markdown.scss'], styleUrls: ['about-changelog.scss', './about-page/about-page.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
}) })
export class AboutChangelogComponent { export class AboutChangelogComponent {}
config = inject(ConfigProvider);
}
@@ -16,14 +16,14 @@
<ion-header> <ion-header>
<ion-toolbar color="primary" mode="ios"> <ion-toolbar color="primary" mode="ios">
<ion-buttons slot="start"> <ion-buttons slot="start">
<ion-back-button defaultHref="/about/changelog"></ion-back-button> <ion-back-button></ion-back-button>
</ion-buttons> </ion-buttons>
<ion-title>{{ 'about.TECHNICAL_CHANGELOG' | translate }}</ion-title> <ion-title>Changelog</ion-title>
<!-- TODO: translation -->
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
<ion-content parallax> <ion-content parallax>
<p class="disclaimer">{{ 'about.TECHNICAL_CHANGELOG_DISCLAIMER' | translate }}</p>
<div class="about-changelog"> <div class="about-changelog">
<markdown class="release-notes" src="assets/CHANGELOG.md"></markdown> <markdown src="assets/about/CHANGELOG.md"></markdown>
</div> </div>
</ion-content> </ion-content>

Some files were not shown because too many files have changed in this diff Show More