mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-06 21:42:49 +00:00
Compare commits
4 Commits
@openstapp
...
63-replace
| Author | SHA1 | Date | |
|---|---|---|---|
|
b33beeb669
|
|||
|
d2d577c012
|
|||
|
fe517fb4aa
|
|||
|
9e26fa7a1a
|
5
.changeset/bright-dryers-act.md
Normal file
5
.changeset/bright-dryers-act.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Update to Angular 16.1
|
||||||
5
.changeset/chilly-goats-cough.md
Normal file
5
.changeset/chilly-goats-cough.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Detail views now won't load data again if it is being navigated to from a list item
|
||||||
11
.changeset/cold-squids-remain.md
Normal file
11
.changeset/cold-squids-remain.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Refactored Opening Hours
|
||||||
|
|
||||||
|
- Migrated Opening Hours to use OnPush change detection
|
||||||
|
- Fixed a bug where opening hours would not update correctly
|
||||||
|
- Lazy-load opening hours module to keep it out of the main bundle
|
||||||
|
- Added e2e tests to verify functionality
|
||||||
|
- Changed live update status to show exact minutes starting one hour before the next change
|
||||||
8
.changeset/cool-jars-kiss.md
Normal file
8
.changeset/cool-jars-kiss.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Removed pack tool
|
||||||
|
|
||||||
|
Use a bundler like `tsup` in conjunction with an
|
||||||
|
`index.ts` that aggregates all exports instead.
|
||||||
11
.changeset/cuddly-bobcats-roll.md
Normal file
11
.changeset/cuddly-bobcats-roll.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/api-plugin': major
|
||||||
|
'@openstapps/api-cli': major
|
||||||
|
'@openstapps/api': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Split API into API, API-CLI and API-Plugin
|
||||||
|
|
||||||
|
Plugins are now required to use `api-plugin`.
|
||||||
|
Consumers of `api` can benefit from a slimmer package with
|
||||||
|
no NodeJS dependencies.
|
||||||
31
.changeset/dull-news-appear.md
Normal file
31
.changeset/dull-news-appear.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/backend': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate config system to cosmiconfig
|
||||||
|
|
||||||
|
Configs are now written using type-checked JavaScript
|
||||||
|
|
||||||
|
```js
|
||||||
|
// @ts-check
|
||||||
|
|
||||||
|
// This file is now type-safe just like TypeScript, but
|
||||||
|
// without the compilation step
|
||||||
|
|
||||||
|
/** @type {import('@openstapps/package').Type} */
|
||||||
|
const foo = {};
|
||||||
|
```
|
||||||
|
|
||||||
|
You can write config files in JavaScript, JSON, or other
|
||||||
|
cosmiconfig-supported formats.
|
||||||
|
|
||||||
|
The config files now are
|
||||||
|
|
||||||
|
- `backendrc.{js,json,...}`
|
||||||
|
- `elasticsearchrc.{js,json,...}`
|
||||||
|
- `prometheusrc.{js,json,...}`
|
||||||
|
|
||||||
|
You can also split them into multiple files,
|
||||||
|
as well as using the `markdown.js` helper in
|
||||||
|
`config/default/tools` to include markdown files
|
||||||
|
as text (see `config/f-u/about-pages`)
|
||||||
5
.changeset/fair-colts-explain.md
Normal file
5
.changeset/fair-colts-explain.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Use observable chains instead of change detection in the rating component
|
||||||
51
.changeset/five-ears-wash.md
Normal file
51
.changeset/five-ears-wash.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': major
|
||||||
|
'@openstapps/prettier-config': major
|
||||||
|
'@openstapps/es-mapping-generator': major
|
||||||
|
'@openstapps/backend-config': major
|
||||||
|
'@openstapps/eslint-config': major
|
||||||
|
'@openstapps/minimal-connector': major
|
||||||
|
'@openstapps/collection-utils': major
|
||||||
|
'@openstapps/minimal-plugin': major
|
||||||
|
'@openstapps/tsconfig': major
|
||||||
|
'@openstapps/api-plugin': major
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
'@openstapps/gitlab-api': major
|
||||||
|
'@openstapps/easy-ast': major
|
||||||
|
'@openstapps/api-cli': major
|
||||||
|
'@openstapps/backend': major
|
||||||
|
'@openstapps/logger': major
|
||||||
|
'@openstapps/proxy': major
|
||||||
|
'@openstapps/core': major
|
||||||
|
'@openstapps/app': major
|
||||||
|
'@openstapps/api': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Move project to a turbo monorepo & pnpm
|
||||||
|
|
||||||
|
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
||||||
|
|
||||||
|
- Removed extraneous files from packages
|
||||||
|
- `.npmrc`
|
||||||
|
- `.npmignore`
|
||||||
|
- `.mailmap`
|
||||||
|
- `.gitignore`
|
||||||
|
- `CONTRIBUTING.md`
|
||||||
|
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
||||||
|
- `package-lock.json`
|
||||||
|
- `.editorconfig`
|
||||||
|
- `.eslintrc.json` (moved eslint config to `package.json`)
|
||||||
|
- `.eslintignore`
|
||||||
|
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
||||||
|
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
||||||
|
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
||||||
|
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
||||||
|
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
||||||
|
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
||||||
|
- Replaced conventional changelog with changesets
|
||||||
|
- Apps with binaries now use a top level `app.js`
|
||||||
|
|
||||||
|
```js
|
||||||
|
#!/usr/bin/env node
|
||||||
|
import './lib/app.js';
|
||||||
|
```
|
||||||
5
.changeset/fluffy-lamps-count.md
Normal file
5
.changeset/fluffy-lamps-count.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Added the ability to remove and add date series from their detail page
|
||||||
5
.changeset/forty-eagles-cough.md
Normal file
5
.changeset/forty-eagles-cough.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Add a way to hide action chips on list items
|
||||||
13
.changeset/fuzzy-walls-greet.md
Normal file
13
.changeset/fuzzy-walls-greet.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/core': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate away from [ts-optchain](https://www.npmjs.com/package/ts-optchain)
|
||||||
|
|
||||||
|
The package has been deprecated with the last releast being 4 years ago.
|
||||||
|
|
||||||
|
TypeScript as well as ECMAScript have native support for optional
|
||||||
|
chaining with the `?.` operator now.
|
||||||
|
|
||||||
|
You will need to update any packages that rely on the translator
|
||||||
|
module.
|
||||||
25
.changeset/giant-crabs-cheer.md
Normal file
25
.changeset/giant-crabs-cheer.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': patch
|
||||||
|
'@openstapps/prettier-config': patch
|
||||||
|
'@openstapps/es-mapping-generator': patch
|
||||||
|
'@openstapps/eslint-config': patch
|
||||||
|
'@openstapps/minimal-connector': patch
|
||||||
|
'@openstapps/minimal-plugin': patch
|
||||||
|
'@openstapps/core-tools': patch
|
||||||
|
'@openstapps/gitlab-api': patch
|
||||||
|
'@openstapps/backend': patch
|
||||||
|
'@openstapps/logger': patch
|
||||||
|
'@openstapps/proxy': patch
|
||||||
|
'@openstapps/core': patch
|
||||||
|
'@openstapps/api': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrated changelogs to changeset format
|
||||||
|
|
||||||
|
```js
|
||||||
|
import fs from 'fs';
|
||||||
|
|
||||||
|
const path = 'packages/logger/CHANGELOG.md';
|
||||||
|
|
||||||
|
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
||||||
|
```
|
||||||
8
.changeset/gorgeous-flowers-reflect.md
Normal file
8
.changeset/gorgeous-flowers-reflect.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/backend': minor
|
||||||
|
'@openstapps/api-cli': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate integration tests from docker-compose solution to a shell script
|
||||||
|
|
||||||
|
`api-cli` no longer builds as a Docker container as a result.
|
||||||
34
.changeset/healthy-steaks-shop.md
Normal file
34
.changeset/healthy-steaks-shop.md
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': major
|
||||||
|
'@openstapps/prettier-config': major
|
||||||
|
'@openstapps/es-mapping-generator': major
|
||||||
|
'@openstapps/backend-config': major
|
||||||
|
'@openstapps/eslint-config': major
|
||||||
|
'@openstapps/minimal-connector': major
|
||||||
|
'@openstapps/collection-utils': major
|
||||||
|
'@openstapps/minimal-plugin': major
|
||||||
|
'@openstapps/tsconfig': major
|
||||||
|
'@openstapps/api-plugin': major
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
'@openstapps/gitlab-api': major
|
||||||
|
'@openstapps/easy-ast': major
|
||||||
|
'@openstapps/api-cli': major
|
||||||
|
'@openstapps/backend': major
|
||||||
|
'@openstapps/logger': major
|
||||||
|
'@openstapps/proxy': major
|
||||||
|
'@openstapps/core': major
|
||||||
|
'@openstapps/app': major
|
||||||
|
'@openstapps/api': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate to ESM
|
||||||
|
|
||||||
|
CommonJS is no longer supported in any capacity. To use the new
|
||||||
|
version, you will need to migrate your package to ESM.
|
||||||
|
We recommend using `tsup` and `Node 18`.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"type": "module"
|
||||||
|
}
|
||||||
|
```
|
||||||
30
.changeset/honest-sheep-train.md
Normal file
30
.changeset/honest-sheep-train.md
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': major
|
||||||
|
'@openstapps/prettier-config': major
|
||||||
|
'@openstapps/es-mapping-generator': major
|
||||||
|
'@openstapps/backend-config': major
|
||||||
|
'@openstapps/eslint-config': major
|
||||||
|
'@openstapps/minimal-connector': major
|
||||||
|
'@openstapps/collection-utils': major
|
||||||
|
'@openstapps/minimal-plugin': major
|
||||||
|
'@openstapps/tsconfig': major
|
||||||
|
'@openstapps/api-plugin': major
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
'@openstapps/gitlab-api': major
|
||||||
|
'@openstapps/easy-ast': major
|
||||||
|
'@openstapps/api-cli': major
|
||||||
|
'@openstapps/backend': major
|
||||||
|
'@openstapps/logger': major
|
||||||
|
'@openstapps/proxy': major
|
||||||
|
'@openstapps/core': major
|
||||||
|
'@openstapps/app': major
|
||||||
|
'@openstapps/api': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate package to Node 18
|
||||||
|
|
||||||
|
- Consumers of this package will need to migrate to Node 18 or
|
||||||
|
higher.
|
||||||
|
- Packages have been migrated from promisified `readFile` or
|
||||||
|
`readFileSync` towards `fs/promises`
|
||||||
|
- Packages use native `flatMap` now
|
||||||
5
.changeset/late-zoos-breathe.md
Normal file
5
.changeset/late-zoos-breathe.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/gitlab-api': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate from request-promise-native to got
|
||||||
5
.changeset/moody-parrots-develop.md
Normal file
5
.changeset/moody-parrots-develop.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Moved project-docs to the [GitLab Wiki](https://gitlab.com/openstapps/openstapps/-/wikis/home) repo.
|
||||||
31
.changeset/neat-hats-trade.md
Normal file
31
.changeset/neat-hats-trade.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': minor
|
||||||
|
'@openstapps/prettier-config': minor
|
||||||
|
'@openstapps/es-mapping-generator': minor
|
||||||
|
'@openstapps/backend-config': minor
|
||||||
|
'@openstapps/eslint-config': minor
|
||||||
|
'@openstapps/minimal-connector': minor
|
||||||
|
'@openstapps/collection-utils': minor
|
||||||
|
'@openstapps/minimal-plugin': minor
|
||||||
|
'@openstapps/tsconfig': minor
|
||||||
|
'@openstapps/api-plugin': minor
|
||||||
|
'@openstapps/core-tools': minor
|
||||||
|
'@openstapps/gitlab-api': minor
|
||||||
|
'@openstapps/easy-ast': minor
|
||||||
|
'@openstapps/api-cli': minor
|
||||||
|
'@openstapps/backend': minor
|
||||||
|
'@openstapps/logger': minor
|
||||||
|
'@openstapps/proxy': minor
|
||||||
|
'@openstapps/core': minor
|
||||||
|
'@openstapps/app': minor
|
||||||
|
'@openstapps/api': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate tests to C8/Chai/Mocha
|
||||||
|
|
||||||
|
- `@testdeck` OOP testing has been removed.
|
||||||
|
- Tests have been unified
|
||||||
|
- CommonJS module mocking has been replaced through
|
||||||
|
refactoring of tests, as ES Modules cannot be mocked
|
||||||
|
(do yourself a favor and don't try to mock them)
|
||||||
|
- C8 now replaces NYC as a native coverage tool
|
||||||
5
.changeset/new-pianos-joke.md
Normal file
5
.changeset/new-pianos-joke.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/es-mapping-generator': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Remove @openstapps/logger dependency
|
||||||
5
.changeset/orange-knives-happen.md
Normal file
5
.changeset/orange-knives-happen.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Add directions to inPlace and place list items
|
||||||
9
.changeset/pink-sheep-relax.md
Normal file
9
.changeset/pink-sheep-relax.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Improved calendar descriptions
|
||||||
|
|
||||||
|
- The dashboard quick link now has a more intuitive icon
|
||||||
|
- "Recurring" has been renamed to "Week Overview"
|
||||||
|
- Long words in calendar tabs will now break instead of overflowing
|
||||||
68
.changeset/pre.json
Normal file
68
.changeset/pre.json
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"mode": "pre",
|
||||||
|
"tag": "next",
|
||||||
|
"initialVersions": {
|
||||||
|
"@openstapps/backend": "2.0.0",
|
||||||
|
"@openstapps/database": "2.0.0",
|
||||||
|
"@openstapps/proxy": "2.0.0",
|
||||||
|
"@openstapps/backend-config": "2.0.0",
|
||||||
|
"@openstapps/eslint-config": "2.0.0",
|
||||||
|
"@openstapps/prettier-config": "2.0.0",
|
||||||
|
"@openstapps/projectmanagement": "2.0.0",
|
||||||
|
"@openstapps/tsconfig": "2.0.0",
|
||||||
|
"@openstapps/minimal-connector": "2.0.0",
|
||||||
|
"@openstapps/minimal-deployment": "2.0.0",
|
||||||
|
"@openstapps/minimal-plugin": "2.0.0",
|
||||||
|
"@openstapps/app": "2.0.0",
|
||||||
|
"@openstapps/api": "2.0.0",
|
||||||
|
"@openstapps/api-cli": "2.0.0",
|
||||||
|
"@openstapps/api-plugin": "2.0.0",
|
||||||
|
"@openstapps/collection-utils": "2.0.0",
|
||||||
|
"@openstapps/core": "2.0.0",
|
||||||
|
"@openstapps/core-tools": "2.0.0",
|
||||||
|
"@openstapps/easy-ast": "2.0.0",
|
||||||
|
"@openstapps/es-mapping-generator": "2.0.0",
|
||||||
|
"@openstapps/gitlab-api": "2.0.0",
|
||||||
|
"@openstapps/logger": "2.0.0",
|
||||||
|
"@openstapps/app-builder-image": "3.0.0-next.3",
|
||||||
|
"@openstapps/node-base": "3.0.0-next.3",
|
||||||
|
"@openstapps/node-builder": "3.0.0-next.3"
|
||||||
|
},
|
||||||
|
"changesets": [
|
||||||
|
"bright-dryers-act",
|
||||||
|
"cool-jars-kiss",
|
||||||
|
"cuddly-bobcats-roll",
|
||||||
|
"dull-news-appear",
|
||||||
|
"five-ears-wash",
|
||||||
|
"fuzzy-walls-greet",
|
||||||
|
"giant-crabs-cheer",
|
||||||
|
"gorgeous-flowers-reflect",
|
||||||
|
"healthy-steaks-shop",
|
||||||
|
"honest-sheep-train",
|
||||||
|
"late-zoos-breathe",
|
||||||
|
"moody-parrots-develop",
|
||||||
|
"neat-hats-trade",
|
||||||
|
"new-pianos-joke",
|
||||||
|
"pretty-timers-complain",
|
||||||
|
"proud-wolves-end",
|
||||||
|
"quick-houses-count",
|
||||||
|
"rare-squids-bake",
|
||||||
|
"serious-meals-sin",
|
||||||
|
"silent-maps-float",
|
||||||
|
"silly-news-punch",
|
||||||
|
"smart-ghosts-shout",
|
||||||
|
"soft-donuts-fail",
|
||||||
|
"sour-coins-visit",
|
||||||
|
"spicy-snails-sort",
|
||||||
|
"stale-garlics-share",
|
||||||
|
"strange-hounds-repair",
|
||||||
|
"tall-ducks-dream",
|
||||||
|
"tame-mayflies-hug",
|
||||||
|
"tame-rings-dream",
|
||||||
|
"tasty-islands-smell",
|
||||||
|
"thick-weeks-compete",
|
||||||
|
"thin-camels-give",
|
||||||
|
"tidy-buses-reflect",
|
||||||
|
"tough-hairs-provide"
|
||||||
|
]
|
||||||
|
}
|
||||||
8
.changeset/pretty-timers-complain.md
Normal file
8
.changeset/pretty-timers-complain.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': major
|
||||||
|
'@openstapps/node-base': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Move images to separate packages
|
||||||
|
|
||||||
|
Removed builder image due to migration to Kaniko
|
||||||
13
.changeset/pretty-wombats-double.md
Normal file
13
.changeset/pretty-wombats-double.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Revamp "My Courses" section on profile page
|
||||||
|
|
||||||
|
The "My Courses" section on the profile page has been improved
|
||||||
|
|
||||||
|
- It will now show the upcoming courses for the next five days
|
||||||
|
- The section header is now consistent with the other sections
|
||||||
|
- The section now uses standard list items instead of the custom solution
|
||||||
|
|
||||||
|
Additionally, the profile page component has been cleaned up.
|
||||||
8
.changeset/proud-cameras-fail.md
Normal file
8
.changeset/proud-cameras-fail.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Adjust map button and item behavior on different screen sizes
|
||||||
|
|
||||||
|
- Small screens will show the item without margins below the map actions
|
||||||
|
- Large screens will show the list item on the left side
|
||||||
9
.changeset/proud-wolves-end.md
Normal file
9
.changeset/proud-wolves-end.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/eslint-config': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Update rules
|
||||||
|
|
||||||
|
- `unicorn/no-array-reduce` is now off
|
||||||
|
- `unicorn/no-non-null-assertion` is now off
|
||||||
|
- Removed prettier rules (use prettier formatting instead)
|
||||||
7
.changeset/quick-houses-count.md
Normal file
7
.changeset/quick-houses-count.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/es-mapping-generator': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Remove put-es-templates
|
||||||
|
|
||||||
|
The `put-es-templates` functionality has been removed.
|
||||||
24
.changeset/rare-squids-bake.md
Normal file
24
.changeset/rare-squids-bake.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': patch
|
||||||
|
'@openstapps/prettier-config': patch
|
||||||
|
'@openstapps/es-mapping-generator': patch
|
||||||
|
'@openstapps/backend-config': patch
|
||||||
|
'@openstapps/eslint-config': patch
|
||||||
|
'@openstapps/minimal-connector': patch
|
||||||
|
'@openstapps/collection-utils': patch
|
||||||
|
'@openstapps/minimal-plugin': patch
|
||||||
|
'@openstapps/tsconfig': patch
|
||||||
|
'@openstapps/api-plugin': patch
|
||||||
|
'@openstapps/core-tools': patch
|
||||||
|
'@openstapps/gitlab-api': patch
|
||||||
|
'@openstapps/easy-ast': patch
|
||||||
|
'@openstapps/api-cli': patch
|
||||||
|
'@openstapps/backend': patch
|
||||||
|
'@openstapps/logger': patch
|
||||||
|
'@openstapps/proxy': patch
|
||||||
|
'@openstapps/core': patch
|
||||||
|
'@openstapps/app': patch
|
||||||
|
'@openstapps/api': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate away from @openstapps/configuration
|
||||||
5
.changeset/serious-meals-sin.md
Normal file
5
.changeset/serious-meals-sin.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Update release configs
|
||||||
29
.changeset/silent-maps-float.md
Normal file
29
.changeset/silent-maps-float.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': patch
|
||||||
|
'@openstapps/prettier-config': patch
|
||||||
|
'@openstapps/es-mapping-generator': patch
|
||||||
|
'@openstapps/backend-config': patch
|
||||||
|
'@openstapps/eslint-config': patch
|
||||||
|
'@openstapps/minimal-deployment': patch
|
||||||
|
'@openstapps/minimal-connector': patch
|
||||||
|
'@openstapps/collection-utils': patch
|
||||||
|
'@openstapps/minimal-plugin': patch
|
||||||
|
'@openstapps/tsconfig': patch
|
||||||
|
'@openstapps/node-builder': patch
|
||||||
|
'@openstapps/api-plugin': patch
|
||||||
|
'@openstapps/core-tools': patch
|
||||||
|
'@openstapps/gitlab-api': patch
|
||||||
|
'@openstapps/app-builder-image': patch
|
||||||
|
'@openstapps/easy-ast': patch
|
||||||
|
'@openstapps/database': patch
|
||||||
|
'@openstapps/node-base': patch
|
||||||
|
'@openstapps/api-cli': patch
|
||||||
|
'@openstapps/backend': patch
|
||||||
|
'@openstapps/logger': patch
|
||||||
|
'@openstapps/proxy': patch
|
||||||
|
'@openstapps/core': patch
|
||||||
|
'@openstapps/app': patch
|
||||||
|
'@openstapps/api': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Update to TypeScript 5.1.6
|
||||||
5
.changeset/silly-news-punch.md
Normal file
5
.changeset/silly-news-punch.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate collection helpers to use @openstapps/collection-utils
|
||||||
8
.changeset/smart-ghosts-shout.md
Normal file
8
.changeset/smart-ghosts-shout.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate to Ionic 7
|
||||||
|
|
||||||
|
- Migrate uses of `<ion-label>` with inputs to new syntax
|
||||||
|
- Fix infinite loop in schedule date picker (`datetime.confirm()` to `datetime.cancel()`)
|
||||||
7
.changeset/soft-donuts-fail.md
Normal file
7
.changeset/soft-donuts-fail.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/api': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate HttpClient to Node 18's native `fetch` API
|
||||||
|
|
||||||
|
HttpClient can now be used both in NodeJS and browsers.
|
||||||
5
.changeset/sour-carpets-flash.md
Normal file
5
.changeset/sour-carpets-flash.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fixed an issue that caused double and triple loading of data detail items through the route stack service
|
||||||
7
.changeset/sour-coins-visit.md
Normal file
7
.changeset/sour-coins-visit.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/es-mapping-generator': major
|
||||||
|
'@openstapps/backend': major
|
||||||
|
'@openstapps/core': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings
|
||||||
5
.changeset/spicy-snails-sort.md
Normal file
5
.changeset/spicy-snails-sort.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/eslint-config': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Add license header enforcement rule (unfinished)
|
||||||
5
.changeset/stale-garlics-share.md
Normal file
5
.changeset/stale-garlics-share.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/core': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Include openapi.json in built package
|
||||||
26
.changeset/strange-hounds-repair.md
Normal file
26
.changeset/strange-hounds-repair.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': minor
|
||||||
|
'@openstapps/minimal-connector': minor
|
||||||
|
'@openstapps/minimal-plugin': minor
|
||||||
|
'@openstapps/collection-utils': minor
|
||||||
|
'@openstapps/core-tools': minor
|
||||||
|
'@openstapps/gitlab-api': minor
|
||||||
|
'@openstapps/backend': minor
|
||||||
|
'@openstapps/logger': minor
|
||||||
|
'@openstapps/core': minor
|
||||||
|
'@openstapps/api': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate away from `@krlwlfrt/async-pool`
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import {mapAsyncLimit} from '@openstapps/collection-utils';
|
||||||
|
|
||||||
|
await mapAsyncLimit(
|
||||||
|
[1, 2, 3],
|
||||||
|
async it => {
|
||||||
|
await someNetworkRequest(it);
|
||||||
|
},
|
||||||
|
5,
|
||||||
|
);
|
||||||
|
```
|
||||||
5
.changeset/tall-ducks-dream.md
Normal file
5
.changeset/tall-ducks-dream.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate away from JIT compilation
|
||||||
5
.changeset/tame-mayflies-hug.md
Normal file
5
.changeset/tame-mayflies-hug.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/logger': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix an issue with chalk terminal colors in tests
|
||||||
9
.changeset/tame-rings-dream.md
Normal file
9
.changeset/tame-rings-dream.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate openapi generation to output single file
|
||||||
|
|
||||||
|
The OpenAPI generator now outputs a single file instead
|
||||||
|
of a directory with the `openapi.json` and copied schema
|
||||||
|
files.
|
||||||
6
.changeset/tasty-islands-smell.md
Normal file
6
.changeset/tasty-islands-smell.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate unit tests to karma-coverage and junit reports.
|
||||||
|
Fixes an issue where coverage reports would not be generated.
|
||||||
5
.changeset/thick-mails-peel.md
Normal file
5
.changeset/thick-mails-peel.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Map items are now native list items
|
||||||
5
.changeset/thick-weeks-compete.md
Normal file
5
.changeset/thick-weeks-compete.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate moment.js to date-fns
|
||||||
23
.changeset/thin-camels-give.md
Normal file
23
.changeset/thin-camels-give.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/projectmanagement': major
|
||||||
|
'@openstapps/es-mapping-generator': major
|
||||||
|
'@openstapps/minimal-connector': major
|
||||||
|
'@openstapps/collection-utils': major
|
||||||
|
'@openstapps/minimal-plugin': major
|
||||||
|
'@openstapps/api-plugin': major
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
'@openstapps/gitlab-api': major
|
||||||
|
'@openstapps/easy-ast': major
|
||||||
|
'@openstapps/api-cli': major
|
||||||
|
'@openstapps/backend': major
|
||||||
|
'@openstapps/logger': major
|
||||||
|
'@openstapps/proxy': major
|
||||||
|
'@openstapps/core': major
|
||||||
|
'@openstapps/api': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate build system to `tsup`
|
||||||
|
|
||||||
|
All packages now use an `index.ts` file to expose contents.
|
||||||
|
|
||||||
|
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
|
||||||
9
.changeset/tidy-buses-reflect.md
Normal file
9
.changeset/tidy-buses-reflect.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/core-tools': major
|
||||||
|
'@openstapps/easy-ast': major
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate easy-ast to separate package
|
||||||
|
|
||||||
|
The `easy-ast` part of `core-tools` has been moved to its own package.
|
||||||
|
For migration, simply use the new package.
|
||||||
5
.changeset/tough-hairs-provide.md
Normal file
5
.changeset/tough-hairs-provide.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/core-tools': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Migrate from away from lodash
|
||||||
5
.changeset/tricky-garlics-hope.md
Normal file
5
.changeset/tricky-garlics-hope.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Replaced simple links with list items in date-series detail
|
||||||
5
.changeset/wet-houses-provide.md
Normal file
5
.changeset/wet-houses-provide.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Use event title for date series instead of the generic date series title
|
||||||
5
.changeset/wicked-cheetahs-prove.md
Normal file
5
.changeset/wicked-cheetahs-prove.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@openstapps/app': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Replace moment.js with date-fns
|
||||||
@@ -1,158 +1,5 @@
|
|||||||
# @openstapps/backend
|
# @openstapps/backend
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate config system to cosmiconfig
|
|
||||||
|
|
||||||
Configs are now written using type-checked JavaScript
|
|
||||||
|
|
||||||
```js
|
|
||||||
// @ts-check
|
|
||||||
|
|
||||||
// This file is now type-safe just like TypeScript, but
|
|
||||||
// without the compilation step
|
|
||||||
|
|
||||||
/** @type {import('@openstapps/package').Type} */
|
|
||||||
const foo = {};
|
|
||||||
```
|
|
||||||
|
|
||||||
You can write config files in JavaScript, JSON, or other
|
|
||||||
cosmiconfig-supported formats.
|
|
||||||
|
|
||||||
The config files now are
|
|
||||||
|
|
||||||
- `backendrc.{js,json,...}`
|
|
||||||
- `elasticsearchrc.{js,json,...}`
|
|
||||||
- `prometheusrc.{js,json,...}`
|
|
||||||
|
|
||||||
You can also split them into multiple files,
|
|
||||||
as well as using the `markdown.js` helper in
|
|
||||||
`config/default/tools` to include markdown files
|
|
||||||
as text (see `config/f-u/about-pages`)
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
- 0a7e6af1: Migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings
|
|
||||||
- 64caebaf: Migrate build system to `tsup`
|
|
||||||
|
|
||||||
All packages now use an `index.ts` file to expose contents.
|
|
||||||
|
|
||||||
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate integration tests from docker-compose solution to a shell script
|
|
||||||
|
|
||||||
`api-cli` no longer builds as a Docker container as a result.
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import {mapAsyncLimit} from '@openstapps/collection-utils';
|
|
||||||
|
|
||||||
await mapAsyncLimit(
|
|
||||||
[1, 2, 3],
|
|
||||||
async it => {
|
|
||||||
await someNetworkRequest(it);
|
|
||||||
},
|
|
||||||
5,
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [1f62b5c5]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [23481d0d]
|
|
||||||
- Updated dependencies [0a7e6af1]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- @openstapps/core-tools@3.0.0
|
|
||||||
- @openstapps/logger@3.0.0
|
|
||||||
- @openstapps/core@3.0.0
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -70,10 +70,6 @@ const config = {
|
|||||||
authProvider: 'paia',
|
authProvider: 'paia',
|
||||||
url: 'https://hds.hebis.de/paia/core',
|
url: 'https://hds.hebis.de/paia/core',
|
||||||
},
|
},
|
||||||
/** TODO: idCards: {
|
|
||||||
authProvider: 'default',
|
|
||||||
url: 'TODO',
|
|
||||||
} */
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
aboutPages,
|
aboutPages,
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export const query: QueryDslQueryContainer = {
|
|||||||
should: [],
|
should: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
weight: 1.05,
|
weight: 1.1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
filter: {
|
filter: {
|
||||||
@@ -42,14 +42,14 @@ export const query: QueryDslQueryContainer = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
term: {
|
term: {
|
||||||
'academicTerms.acronym.raw': 'WS 2023/24',
|
'academicTerms.acronym.raw': 'WS 2022/23',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
should: [],
|
should: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
weight: 1.1,
|
weight: 1.05,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
filter: {
|
filter: {
|
||||||
@@ -69,7 +69,7 @@ export const query: QueryDslQueryContainer = {
|
|||||||
should: [],
|
should: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
weight: 1.05,
|
weight: 1.1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
filter: {
|
filter: {
|
||||||
@@ -82,14 +82,14 @@ export const query: QueryDslQueryContainer = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
term: {
|
term: {
|
||||||
'academicTerms.acronym.raw': 'WiSe 2023/24',
|
'academicTerms.acronym.raw': 'WiSe 2022/23',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
should: [],
|
should: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
weight: 1.1,
|
weight: 1.05,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
filter: {
|
filter: {
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
# @openstapps/database
|
# @openstapps/database
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/database",
|
"name": "@openstapps/database",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"files": [
|
"files": [
|
||||||
"config",
|
"config",
|
||||||
|
|||||||
@@ -1,101 +1,5 @@
|
|||||||
# @openstapps/proxy
|
# @openstapps/proxy
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
- 64caebaf: Migrate build system to `tsup`
|
|
||||||
|
|
||||||
All packages now use an `index.ts` file to expose contents.
|
|
||||||
|
|
||||||
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [23481d0d]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- @openstapps/logger@3.0.0
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
|
|||||||
@@ -1,74 +1,5 @@
|
|||||||
# @openstapps/backend-config
|
# @openstapps/backend-config
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/backend-config",
|
"name": "@openstapps/backend-config",
|
||||||
"description": "Backend Configuration for OpenStApps",
|
"description": "Backend Configuration for OpenStApps",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
|
|||||||
@@ -1,91 +1,5 @@
|
|||||||
# @openstapps/eslint-config
|
# @openstapps/eslint-config
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
- 64caebaf: Update rules
|
|
||||||
|
|
||||||
- `unicorn/no-array-reduce` is now off
|
|
||||||
- `unicorn/no-non-null-assertion` is now off
|
|
||||||
- Removed prettier rules (use prettier formatting instead)
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- 64caebaf: Add license header enforcement rule (unfinished)
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"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,84 +1,5 @@
|
|||||||
# @openstapps/prettier-config
|
# @openstapps/prettier-config
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/prettier-config",
|
"name": "@openstapps/prettier-config",
|
||||||
"description": "StApps Prettier Config",
|
"description": "StApps Prettier Config",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"type": "module",
|
"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",
|
||||||
|
|||||||
@@ -1,126 +1,5 @@
|
|||||||
# @openstapps/projectmanagement
|
# @openstapps/projectmanagement
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
- 11c9d742: Move images to separate packages
|
|
||||||
|
|
||||||
Removed builder image due to migration to Kaniko
|
|
||||||
|
|
||||||
- 64caebaf: Migrate build system to `tsup`
|
|
||||||
|
|
||||||
All packages now use an `index.ts` file to expose contents.
|
|
||||||
|
|
||||||
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import {mapAsyncLimit} from '@openstapps/collection-utils';
|
|
||||||
|
|
||||||
await mapAsyncLimit(
|
|
||||||
[1, 2, 3],
|
|
||||||
async it => {
|
|
||||||
await someNetworkRequest(it);
|
|
||||||
},
|
|
||||||
5,
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate moment.js to date-fns
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Moved project-docs to the [GitLab Wiki](https://gitlab.com/openstapps/openstapps/-/wikis/home) repo.
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 4e4c7b5c: Update release configs
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [23481d0d]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- @openstapps/collection-utils@3.0.0
|
|
||||||
- @openstapps/gitlab-api@3.0.0
|
|
||||||
- @openstapps/logger@3.0.0
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Major Changes
|
### Major Changes
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
|
|||||||
@@ -1,74 +1,5 @@
|
|||||||
# @openstapps/tsconfig
|
# @openstapps/tsconfig
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"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,123 +1,5 @@
|
|||||||
# @openstapps/minimal-connector
|
# @openstapps/minimal-connector
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
- 64caebaf: Migrate build system to `tsup`
|
|
||||||
|
|
||||||
All packages now use an `index.ts` file to expose contents.
|
|
||||||
|
|
||||||
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import {mapAsyncLimit} from '@openstapps/collection-utils';
|
|
||||||
|
|
||||||
await mapAsyncLimit(
|
|
||||||
[1, 2, 3],
|
|
||||||
async it => {
|
|
||||||
await someNetworkRequest(it);
|
|
||||||
},
|
|
||||||
5,
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [1f62b5c5]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [23481d0d]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [0a7e6af1]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- @openstapps/api@3.0.0
|
|
||||||
- @openstapps/logger@3.0.0
|
|
||||||
- @openstapps/core@3.0.0
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
# @openstapps/minimal-deployment
|
# @openstapps/minimal-deployment
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/minimal-deployment",
|
"name": "@openstapps/minimal-deployment",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"files": [
|
"files": [
|
||||||
"database",
|
"database",
|
||||||
|
|||||||
@@ -1,129 +1,5 @@
|
|||||||
# @openstapps/minimal-plugin
|
# @openstapps/minimal-plugin
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
- 64caebaf: Migrate build system to `tsup`
|
|
||||||
|
|
||||||
All packages now use an `index.ts` file to expose contents.
|
|
||||||
|
|
||||||
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
|
|
||||||
|
|
||||||
```ts
|
|
||||||
import {mapAsyncLimit} from '@openstapps/collection-utils';
|
|
||||||
|
|
||||||
await mapAsyncLimit(
|
|
||||||
[1, 2, 3],
|
|
||||||
async it => {
|
|
||||||
await someNetworkRequest(it);
|
|
||||||
},
|
|
||||||
5,
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- 64caebaf: Migrated changelogs to changeset format
|
|
||||||
|
|
||||||
```js
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const path = 'packages/logger/CHANGELOG.md';
|
|
||||||
|
|
||||||
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
|
|
||||||
```
|
|
||||||
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [1f62b5c5]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [23481d0d]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [0a7e6af1]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- @openstapps/core-tools@3.0.0
|
|
||||||
- @openstapps/api-plugin@3.0.0
|
|
||||||
- @openstapps/api@3.0.0
|
|
||||||
- @openstapps/logger@3.0.0
|
|
||||||
- @openstapps/core@3.0.0
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/minimal-plugin",
|
"name": "@openstapps/minimal-plugin",
|
||||||
"description": "Minimal Plugin",
|
"description": "Minimal Plugin",
|
||||||
"version": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
|
|||||||
2
frontend/app/.gitignore
vendored
2
frontend/app/.gitignore
vendored
@@ -44,5 +44,3 @@ UserInterfaceState.xcuserstate
|
|||||||
|
|
||||||
docs
|
docs
|
||||||
bundle-info.html
|
bundle-info.html
|
||||||
|
|
||||||
.browser-data/
|
|
||||||
|
|||||||
@@ -1,145 +1,5 @@
|
|||||||
# @openstapps/app
|
# @openstapps/app
|
||||||
|
|
||||||
## 3.0.0
|
|
||||||
|
|
||||||
### Major Changes
|
|
||||||
|
|
||||||
- 23481d0d: Update to Angular 16.1
|
|
||||||
- 64caebaf: Move project to a turbo monorepo & pnpm
|
|
||||||
|
|
||||||
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
|
|
||||||
|
|
||||||
- Removed extraneous files from packages
|
|
||||||
- `.npmrc`
|
|
||||||
- `.npmignore`
|
|
||||||
- `.mailmap`
|
|
||||||
- `.gitignore`
|
|
||||||
- `CONTRIBUTING.md`
|
|
||||||
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
|
|
||||||
- `package-lock.json`
|
|
||||||
- `.editorconfig`
|
|
||||||
- `.eslintrc.json` (moved eslint config to `package.json`)
|
|
||||||
- `.eslintignore`
|
|
||||||
- `.gitlab-ci.yml` (Most workflows are workspace-level)
|
|
||||||
- `.gitlab/**` (issue templates etc. are now workspace-level)
|
|
||||||
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
|
|
||||||
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
|
|
||||||
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
|
|
||||||
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
|
|
||||||
- Replaced conventional changelog with changesets
|
|
||||||
- Apps with binaries now use a top level `app.js`
|
|
||||||
|
|
||||||
```js
|
|
||||||
#!/usr/bin/env node
|
|
||||||
import './lib/app.js';
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate to ESM
|
|
||||||
|
|
||||||
CommonJS is no longer supported in any capacity. To use the new
|
|
||||||
version, you will need to migrate your package to ESM.
|
|
||||||
We recommend using `tsup` and `Node 18`.
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"type": "module"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 64caebaf: Migrate package to Node 18
|
|
||||||
|
|
||||||
- Consumers of this package will need to migrate to Node 18 or
|
|
||||||
higher.
|
|
||||||
- Packages have been migrated from promisified `readFile` or
|
|
||||||
`readFileSync` towards `fs/promises`
|
|
||||||
- Packages use native `flatMap` now
|
|
||||||
|
|
||||||
### Minor Changes
|
|
||||||
|
|
||||||
- f2c4ee30: Detail views now won't load data again if it is being navigated to from a list item
|
|
||||||
- e1cc33bb: Added the ability to remove and add date series from their detail page
|
|
||||||
- 64caebaf: Migrate tests to C8/Chai/Mocha
|
|
||||||
|
|
||||||
- `@testdeck` OOP testing has been removed.
|
|
||||||
- Tests have been unified
|
|
||||||
- CommonJS module mocking has been replaced through
|
|
||||||
refactoring of tests, as ES Modules cannot be mocked
|
|
||||||
(do yourself a favor and don't try to mock them)
|
|
||||||
- C8 now replaces NYC as a native coverage tool
|
|
||||||
|
|
||||||
- 1f62b5c5: Add support for web-service-provided id cards on the profile page
|
|
||||||
- a5c9d220: Add directions to inPlace and place list items
|
|
||||||
- e1cc33bb: Improved calendar descriptions
|
|
||||||
|
|
||||||
- The dashboard quick link now has a more intuitive icon
|
|
||||||
- "Recurring" has been renamed to "Week Overview"
|
|
||||||
- Long words in calendar tabs will now break instead of overflowing
|
|
||||||
|
|
||||||
- 001f978b: Revamp "My Courses" section on profile page
|
|
||||||
|
|
||||||
The "My Courses" section on the profile page has been improved
|
|
||||||
|
|
||||||
- It will now show the upcoming courses for the next five days
|
|
||||||
- The section header is now consistent with the other sections
|
|
||||||
- The section now uses standard list items instead of the custom solution
|
|
||||||
|
|
||||||
Additionally, the profile page component has been cleaned up.
|
|
||||||
|
|
||||||
- a5c9d220: Adjust map button and item behavior on different screen sizes
|
|
||||||
|
|
||||||
- Small screens will show the item without margins below the map actions
|
|
||||||
- Large screens will show the list item on the left side
|
|
||||||
|
|
||||||
- 23481d0d: Migrate to Ionic 7
|
|
||||||
|
|
||||||
- Migrate uses of `<ion-label>` with inputs to new syntax
|
|
||||||
- Fix infinite loop in schedule date picker (`datetime.confirm()` to `datetime.cancel()`)
|
|
||||||
|
|
||||||
- 64caebaf: Migrate away from JIT compilation
|
|
||||||
- a5c9d220: Map items are now native list items
|
|
||||||
- e1cc33bb: Replaced simple links with list items in date-series detail
|
|
||||||
- 001f978b: Use event title for date series instead of the generic date series title
|
|
||||||
|
|
||||||
### Patch Changes
|
|
||||||
|
|
||||||
- a99e08cd: Refactored Opening Hours
|
|
||||||
|
|
||||||
- Migrated Opening Hours to use OnPush change detection
|
|
||||||
- Fixed a bug where opening hours would not update correctly
|
|
||||||
- Lazy-load opening hours module to keep it out of the main bundle
|
|
||||||
- Added e2e tests to verify functionality
|
|
||||||
- Changed live update status to show exact minutes starting one hour before the next change
|
|
||||||
|
|
||||||
- bd09b366: Use observable chains instead of change detection in the rating component
|
|
||||||
- 001f978b: Add a way to hide action chips on list items
|
|
||||||
- e0b7e616: Fixed distance not updating in list items
|
|
||||||
- b210e0d9: Change leaflet tiles to be inverted as a whole
|
|
||||||
- 98546a97: Migrate away from @openstapps/configuration
|
|
||||||
- 23481d0d: Update to TypeScript 5.1.6
|
|
||||||
- bebee6b4: Migrate collection helpers to use @openstapps/collection-utils
|
|
||||||
- 3c49c4cf: Fixed an issue that caused double and triple loading of data detail items through the route stack service
|
|
||||||
- 107a7c5e: Migrate unit tests to karma-coverage and junit reports.
|
|
||||||
Fixes an issue where coverage reports would not be generated.
|
|
||||||
- 1f62b5c5: Make section swiper buttons reactive
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [1f62b5c5]
|
|
||||||
- Updated dependencies [98546a97]
|
|
||||||
- Updated dependencies [23481d0d]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [0a7e6af1]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- Updated dependencies [64caebaf]
|
|
||||||
- @openstapps/api@3.0.0
|
|
||||||
- @openstapps/collection-utils@3.0.0
|
|
||||||
- @openstapps/core@3.0.0
|
|
||||||
|
|
||||||
## 3.0.0-next.4
|
## 3.0.0-next.4
|
||||||
|
|
||||||
### Major Changes
|
### Major Changes
|
||||||
|
|||||||
@@ -52,44 +52,6 @@ All the npm scripts are defined in `package.json` [file](package.json). It is re
|
|||||||
|
|
||||||
## Most useful commands
|
## Most useful commands
|
||||||
|
|
||||||
## Editing the Ionic Database from the browser
|
|
||||||
|
|
||||||
Add the following function using the browser console
|
|
||||||
|
|
||||||
```js
|
|
||||||
function addToIonicDB(key, value) {
|
|
||||||
indexedDB.open('_ionicstorage').onsuccess = event => {
|
|
||||||
const db = event.target.result;
|
|
||||||
db.transaction('_ionickv', 'readwrite').objectStore('_ionickv').put(value, key);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
You can then call the function in the browser to add values to the
|
|
||||||
ionic database in the IndexedDB.
|
|
||||||
|
|
||||||
For example, you can add a stored authorization like this:
|
|
||||||
|
|
||||||
```js
|
|
||||||
addToIonicDB(
|
|
||||||
'token_response',
|
|
||||||
JSON.stringify({
|
|
||||||
access_token: 'AT-123-abcdefghi',
|
|
||||||
refresh_token: 'RT-123-jklmnopqrs',
|
|
||||||
scope: '',
|
|
||||||
token_type: 'bearer',
|
|
||||||
issued_at: 1696852785,
|
|
||||||
expires_in: '28800',
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
You'll need to run _Chromium_ using
|
|
||||||
|
|
||||||
```shell
|
|
||||||
pnpm chromium:no-cors
|
|
||||||
```
|
|
||||||
|
|
||||||
### 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):
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':capacitor-app')
|
implementation project(':capacitor-app')
|
||||||
implementation project(':capacitor-browser')
|
implementation project(':capacitor-browser')
|
||||||
implementation project(':capacitor-clipboard')
|
|
||||||
implementation project(':capacitor-device')
|
implementation project(':capacitor-device')
|
||||||
implementation project(':capacitor-dialog')
|
implementation project(':capacitor-dialog')
|
||||||
implementation project(':capacitor-filesystem')
|
implementation project(':capacitor-filesystem')
|
||||||
|
|||||||
@@ -7,10 +7,6 @@
|
|||||||
"pkg": "@capacitor/browser",
|
"pkg": "@capacitor/browser",
|
||||||
"classpath": "com.capacitorjs.plugins.browser.BrowserPlugin"
|
"classpath": "com.capacitorjs.plugins.browser.BrowserPlugin"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"pkg": "@capacitor/clipboard",
|
|
||||||
"classpath": "com.capacitorjs.plugins.clipboard.ClipboardPlugin"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"pkg": "@capacitor/device",
|
"pkg": "@capacitor/device",
|
||||||
"classpath": "com.capacitorjs.plugins.device.DevicePlugin"
|
"classpath": "com.capacitorjs.plugins.device.DevicePlugin"
|
||||||
|
|||||||
@@ -8,9 +8,6 @@ project(':capacitor-app').projectDir = new File('../../../node_modules/.pnpm/@ca
|
|||||||
include ':capacitor-browser'
|
include ':capacitor-browser'
|
||||||
project(':capacitor-browser').projectDir = new File('../../../node_modules/.pnpm/@capacitor+browser@4.1.0_@capacitor+core@4.6.1/node_modules/@capacitor/browser/android')
|
project(':capacitor-browser').projectDir = new File('../../../node_modules/.pnpm/@capacitor+browser@4.1.0_@capacitor+core@4.6.1/node_modules/@capacitor/browser/android')
|
||||||
|
|
||||||
include ':capacitor-clipboard'
|
|
||||||
project(':capacitor-clipboard').projectDir = new File('../../../node_modules/.pnpm/@capacitor+clipboard@4.1.0_@capacitor+core@4.6.1/node_modules/@capacitor/clipboard/android')
|
|
||||||
|
|
||||||
include ':capacitor-device'
|
include ':capacitor-device'
|
||||||
project(':capacitor-device').projectDir = new File('../../../node_modules/.pnpm/@capacitor+device@4.1.0_@capacitor+core@4.6.1/node_modules/@capacitor/device/android')
|
project(':capacitor-device').projectDir = new File('../../../node_modules/.pnpm/@capacitor+device@4.1.0_@capacitor+core@4.6.1/node_modules/@capacitor/device/android')
|
||||||
|
|
||||||
|
|||||||
@@ -30,14 +30,14 @@ describe('ical', function () {
|
|||||||
|
|
||||||
cy.get('ion-app > ion-modal').within(() => {
|
cy.get('ion-app > ion-modal').within(() => {
|
||||||
cy.get('ion-footer > ion-toolbar > ion-button').should('have.attr', 'disabled');
|
cy.get('ion-footer > ion-toolbar > ion-button').should('have.attr', 'disabled');
|
||||||
cy.contains('ion-item', /19\.\s+Januar\s+2059,\s+\d{2}:00\s+-\s+\d{2}:00/).click();
|
cy.contains('ion-item', /1\s+Stunde\s+Sonntag,\s+19\.\s+Januar\s+2059\s+um\s+\d{2}:00/).click();
|
||||||
cy.get('ion-footer > ion-toolbar > ion-button').should('not.have.attr', 'disabled');
|
cy.get('ion-footer > ion-toolbar > ion-button').should('not.have.attr', 'disabled');
|
||||||
cy.get('ion-footer > ion-toolbar > ion-button').click();
|
cy.get('ion-footer > ion-toolbar > ion-button').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
cy.get('add-event-review-modal').within(() => {
|
cy.get('add-event-review-modal').within(() => {
|
||||||
cy.get('ion-item-group').should('contain', 'UNIcert (Test)');
|
cy.get('ion-item-group').should('contain', 'UNIcert (Test)');
|
||||||
cy.contains('ion-item-group', /19\.\s+Jan\.\s+2059,\s+\d{2}:00/);
|
cy.contains('ion-item-group', /19\.\s+Januar\s+2059\s+um\s+\d{2}:00/);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ describe('schedule', function () {
|
|||||||
|
|
||||||
it('should respect the url', function () {
|
it('should respect the url', function () {
|
||||||
cy.visit('/schedule/calendar/2022-01-19');
|
cy.visit('/schedule/calendar/2022-01-19');
|
||||||
cy.get('#date-select-button0').should('contain', '19.01.22');
|
cy.get('#date-select-button0').should('contain', '19.01.2022');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should navigate a full page', function () {
|
it('should navigate a full page', function () {
|
||||||
@@ -66,13 +66,13 @@ describe('schedule', function () {
|
|||||||
|
|
||||||
it('should navigate to a specific date', function () {
|
it('should navigate to a specific date', function () {
|
||||||
cy.visit('/schedule/calendar/2059-01-19');
|
cy.visit('/schedule/calendar/2059-01-19');
|
||||||
cy.contains('#date-select-button0', '19.01.59').click();
|
cy.contains('#date-select-button0', '19.01.2059').click();
|
||||||
cy.wait(2000);
|
cy.wait(2000);
|
||||||
cy.get('button[data-day=1][data-month=1][data-year=2059]', {
|
cy.get('button[data-day=1][data-month=1][data-year=2059]', {
|
||||||
includeShadowDom: true,
|
includeShadowDom: true,
|
||||||
}).click();
|
}).click();
|
||||||
cy.wait(2000);
|
cy.wait(2000);
|
||||||
cy.contains('#date-select-button0', '01.01.59').click();
|
cy.contains('#date-select-button0', '01.01.2059').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: Reenable and stabilize tests
|
// TODO: Reenable and stabilize tests
|
||||||
|
|||||||
@@ -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": "3.0.0",
|
"version": "3.0.0-next.4",
|
||||||
"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>",
|
||||||
@@ -15,14 +15,13 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"analyze": "webpack-bundle-analyzer www/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",
|
"build": "pnpm check-icons && ng build --configuration=production --stats-json && webpack-bundle-analyzer --no-open www/stats.json --mode static --report www/bundle-info.html",
|
||||||
"build:analyze": "npm run build:stats && npm run analyze",
|
"build:analyze": "npm run build:stats && npm run analyze",
|
||||||
"build:android": "ionic capacitor build android --no-open && cd android && ./gradlew clean assembleDebug && cd ..",
|
"build:android": "ionic capacitor build android --no-open && cd android && ./gradlew clean assembleDebug && cd ..",
|
||||||
"build:prod": "ng build --configuration=production",
|
"build:prod": "ng build --configuration=production",
|
||||||
"build:stats": "ng build --configuration=production --stats-json",
|
"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": "ts-node-esm scripts/check-icon-correctness.ts",
|
"check-icons": "ts-node-esm scripts/check-icon-correctness.ts",
|
||||||
"chromium:no-cors": "chromium --disable-web-security --user-data-dir=\".browser-data/chromium\"",
|
|
||||||
"cypress:open": "cypress open",
|
"cypress:open": "cypress open",
|
||||||
"cypress:run": "cypress run",
|
"cypress:run": "cypress run",
|
||||||
"docker:build": "sudo docker run -p 8100:8100 -p 35729:35729 -p 53703:53703 -v $PWD:/app -it registry.gitlab.com/openstapps/app bash -c \"npm install && npm run build\"",
|
"docker:build": "sudo docker run -p 8100:8100 -p 35729:35729 -p 53703:53703 -v $PWD:/app -it registry.gitlab.com/openstapps/app bash -c \"npm install && npm run build\"",
|
||||||
@@ -93,6 +92,7 @@
|
|||||||
"capacitor-secure-storage-plugin": "0.8.1",
|
"capacitor-secure-storage-plugin": "0.8.1",
|
||||||
"cordova-plugin-calendar": "5.1.6",
|
"cordova-plugin-calendar": "5.1.6",
|
||||||
"date-fns": "2.30.0",
|
"date-fns": "2.30.0",
|
||||||
|
"duration-fns": "3.0.2",
|
||||||
"deepmerge": "4.3.1",
|
"deepmerge": "4.3.1",
|
||||||
"form-data": "4.0.0",
|
"form-data": "4.0.0",
|
||||||
"geojson": "0.5.0",
|
"geojson": "0.5.0",
|
||||||
@@ -101,11 +101,9 @@
|
|||||||
"leaflet": "1.9.3",
|
"leaflet": "1.9.3",
|
||||||
"leaflet.markercluster": "1.5.3",
|
"leaflet.markercluster": "1.5.3",
|
||||||
"material-symbols": "0.10.0",
|
"material-symbols": "0.10.0",
|
||||||
"moment": "2.29.4",
|
|
||||||
"ngx-date-fns": "10.0.1",
|
"ngx-date-fns": "10.0.1",
|
||||||
"ngx-logger": "5.0.12",
|
"ngx-logger": "5.0.12",
|
||||||
"ngx-markdown": "16.0.0",
|
"ngx-markdown": "16.0.0",
|
||||||
"ngx-moment": "6.0.2",
|
|
||||||
"opening_hours": "3.8.0",
|
"opening_hours": "3.8.0",
|
||||||
"rxjs": "7.8.1",
|
"rxjs": "7.8.1",
|
||||||
"swiper": "8.4.5",
|
"swiper": "8.4.5",
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
|
||||||
import moment from 'moment';
|
import {addDays, endOfToday, formatISO, startOfToday} from 'date-fns';
|
||||||
|
|
||||||
export const sampleResources = [
|
export const sampleResources = [
|
||||||
{
|
{
|
||||||
@@ -793,8 +793,8 @@ export const sampleResources = [
|
|||||||
offers: [
|
offers: [
|
||||||
{
|
{
|
||||||
availability: 'in stock',
|
availability: 'in stock',
|
||||||
availabilityStarts: moment().startOf('day').add(2, 'days').toISOString(),
|
availabilityStarts: formatISO(addDays(startOfToday(), 2)),
|
||||||
availabilityEnds: moment().endOf('day').add(2, 'days').toISOString(),
|
availabilityEnds: formatISO(addDays(endOfToday(), 2)),
|
||||||
prices: {
|
prices: {
|
||||||
default: 6.5,
|
default: 6.5,
|
||||||
student: 5,
|
student: 5,
|
||||||
@@ -904,8 +904,8 @@ export const sampleResources = [
|
|||||||
offers: [
|
offers: [
|
||||||
{
|
{
|
||||||
availability: 'in stock',
|
availability: 'in stock',
|
||||||
availabilityStarts: moment().startOf('day').toISOString(),
|
availabilityStarts: formatISO(startOfToday()),
|
||||||
availabilityEnds: moment().endOf('day').add(2, 'days').toISOString(),
|
availabilityEnds: formatISO(addDays(endOfToday(), 2)),
|
||||||
prices: {
|
prices: {
|
||||||
default: 4.85,
|
default: 4.85,
|
||||||
student: 2.85,
|
student: 2.85,
|
||||||
@@ -984,8 +984,8 @@ export const sampleResources = [
|
|||||||
uid: '3b9b3df6-3a7a-58cc-922f-c7335c002634',
|
uid: '3b9b3df6-3a7a-58cc-922f-c7335c002634',
|
||||||
},
|
},
|
||||||
availability: 'in stock',
|
availability: 'in stock',
|
||||||
availabilityStarts: moment().startOf('day').add(2, 'days').toISOString(),
|
availabilityStarts: formatISO(addDays(startOfToday(), 2)),
|
||||||
availabilityEnds: moment().endOf('day').add(2, 'days').toISOString(),
|
availabilityEnds: formatISO(addDays(endOfToday(), 2)),
|
||||||
inPlace: {
|
inPlace: {
|
||||||
geo: {
|
geo: {
|
||||||
point: {
|
point: {
|
||||||
@@ -1046,8 +1046,8 @@ export const sampleResources = [
|
|||||||
],
|
],
|
||||||
offers: [
|
offers: [
|
||||||
{
|
{
|
||||||
availabilityEnds: moment().endOf('day').toISOString(),
|
availabilityEnds: formatISO(endOfToday()),
|
||||||
availabilityStarts: moment().startOf('day').toISOString(),
|
availabilityStarts: formatISO(startOfToday()),
|
||||||
availability: 'in stock',
|
availability: 'in stock',
|
||||||
inPlace: {
|
inPlace: {
|
||||||
type: 'room',
|
type: 'room',
|
||||||
|
|||||||
@@ -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 {Observable, shareReplay} from 'rxjs';
|
import {Observable} from 'rxjs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -22,7 +22,7 @@ export function fromMutationObserver(
|
|||||||
target: Node,
|
target: Node,
|
||||||
options?: MutationObserverInit,
|
options?: MutationObserverInit,
|
||||||
): Observable<MutationRecord[]> {
|
): Observable<MutationRecord[]> {
|
||||||
return new Observable<MutationRecord[]>(subscriber => {
|
return new Observable(subscriber => {
|
||||||
const observer = new MutationObserver(mutations => {
|
const observer = new MutationObserver(mutations => {
|
||||||
subscriber.next(mutations);
|
subscriber.next(mutations);
|
||||||
});
|
});
|
||||||
@@ -30,5 +30,5 @@ export function fromMutationObserver(
|
|||||||
return () => {
|
return () => {
|
||||||
observer.disconnect();
|
observer.disconnect();
|
||||||
};
|
};
|
||||||
}).pipe(shareReplay(1));
|
});
|
||||||
}
|
}
|
||||||
@@ -21,11 +21,8 @@ import {RouteReuseStrategy} from '@angular/router';
|
|||||||
import {IonicModule, IonicRouteStrategy, Platform} from '@ionic/angular';
|
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/min/locales';
|
|
||||||
import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger';
|
import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger';
|
||||||
import SwiperCore, {FreeMode, Navigation} from 'swiper';
|
import SwiperCore, {FreeMode, Navigation} from 'swiper';
|
||||||
|
|
||||||
import {environment} from '../environments/environment';
|
import {environment} from '../environments/environment';
|
||||||
import {AppRoutingModule} from './app-routing.module';
|
import {AppRoutingModule} from './app-routing.module';
|
||||||
import {AppComponent} from './app.component';
|
import {AppComponent} from './app.component';
|
||||||
@@ -66,7 +63,7 @@ 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';
|
||||||
import {setDefaultOptions} from 'date-fns';
|
import {setDefaultOptions} from 'date-fns';
|
||||||
import {DateFnsConfigurationService} from 'ngx-date-fns';
|
import {DateFnsConfigurationService, DateFnsModule} from 'ngx-date-fns';
|
||||||
|
|
||||||
registerLocaleData(localeDe);
|
registerLocaleData(localeDe);
|
||||||
|
|
||||||
@@ -104,8 +101,7 @@ export function initializerFactory(
|
|||||||
// this language will be used as a fallback when a translation isn't found in the current language
|
// this language will be used as a fallback when a translation isn't found in the current language
|
||||||
translateService.setDefaultLang('en');
|
translateService.setDefaultLang('en');
|
||||||
translateService.use(languageCode);
|
translateService.use(languageCode);
|
||||||
moment.locale(languageCode);
|
const dateFnsLocale = await getDateFnsLocale(languageCode as SCLanguageCode, translateService);
|
||||||
const dateFnsLocale = await getDateFnsLocale(languageCode as SCLanguageCode);
|
|
||||||
setDefaultOptions({locale: dateFnsLocale});
|
setDefaultOptions({locale: dateFnsLocale});
|
||||||
dateFnsConfigurationService.setLocale(dateFnsLocale);
|
dateFnsConfigurationService.setLocale(dateFnsLocale);
|
||||||
|
|
||||||
@@ -144,6 +140,7 @@ export function createTranslateLoader(http: HttpClient) {
|
|||||||
ConfigModule,
|
ConfigModule,
|
||||||
DashboardModule,
|
DashboardModule,
|
||||||
DataModule,
|
DataModule,
|
||||||
|
DateFnsModule.forRoot(),
|
||||||
HebisModule,
|
HebisModule,
|
||||||
IonicModule.forRoot(),
|
IonicModule.forRoot(),
|
||||||
IonIconModule,
|
IonIconModule,
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
* 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 {NgModule} from '@angular/core';
|
import {NgModule} from '@angular/core';
|
||||||
import {AssessmentListItemComponent} from './types/assessment/assessment-list-item.component';
|
import {AssessmentListItemComponent} from './types/assessment/assessment-list-item.component';
|
||||||
import {AssessmentBaseInfoComponent} from './types/assessment/assessment-base-info.component';
|
import {AssessmentBaseInfoComponent} from './types/assessment/assessment-base-info.component';
|
||||||
@@ -27,7 +26,6 @@ import {CourseOfStudyAssessmentComponent} from './types/course-of-study/course-o
|
|||||||
import {AssessmentsPageComponent} from './page/assessments-page.component';
|
import {AssessmentsPageComponent} from './page/assessments-page.component';
|
||||||
import {RouterModule} from '@angular/router';
|
import {RouterModule} from '@angular/router';
|
||||||
import {AuthGuardService} from '../auth/auth-guard.service';
|
import {AuthGuardService} from '../auth/auth-guard.service';
|
||||||
import {MomentModule} from 'ngx-moment';
|
|
||||||
import {AssessmentsListItemComponent} from './list/assessments-list-item.component';
|
import {AssessmentsListItemComponent} from './list/assessments-list-item.component';
|
||||||
import {AssessmentsDataListComponent} from './list/assessments-data-list.component';
|
import {AssessmentsDataListComponent} from './list/assessments-data-list.component';
|
||||||
import {AssessmentsDetailComponent} from './detail/assessments-detail.component';
|
import {AssessmentsDetailComponent} from './detail/assessments-detail.component';
|
||||||
@@ -37,6 +35,7 @@ import {ProtectedRoutes} from '../auth/protected.routes';
|
|||||||
import {AssessmentsTreeListComponent} from './list/assessments-tree-list.component';
|
import {AssessmentsTreeListComponent} from './list/assessments-tree-list.component';
|
||||||
import {IonIconModule} from '../../util/ion-icon/ion-icon.module';
|
import {IonIconModule} from '../../util/ion-icon/ion-icon.module';
|
||||||
import {UtilModule} from '../../util/util.module';
|
import {UtilModule} from '../../util/util.module';
|
||||||
|
import {FormatPurePipeModule, ParseIsoPipeModule} from 'ngx-date-fns';
|
||||||
|
|
||||||
const routes: ProtectedRoutes = [
|
const routes: ProtectedRoutes = [
|
||||||
{
|
{
|
||||||
@@ -75,8 +74,9 @@ const routes: ProtectedRoutes = [
|
|||||||
TranslateModule,
|
TranslateModule,
|
||||||
DataModule,
|
DataModule,
|
||||||
ThingTranslateModule,
|
ThingTranslateModule,
|
||||||
MomentModule,
|
|
||||||
UtilModule,
|
UtilModule,
|
||||||
|
ParseIsoPipeModule,
|
||||||
|
FormatPurePipeModule,
|
||||||
],
|
],
|
||||||
providers: [AssessmentsProvider],
|
providers: [AssessmentsProvider],
|
||||||
exports: [],
|
exports: [],
|
||||||
|
|||||||
@@ -14,6 +14,9 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h2 class="name">{{ 'name' | thingTranslate : item }} {{ item.date ? (item.date | amDateFormat) : '' }}</h2>
|
<h2 class="name">
|
||||||
|
{{ 'name' | thingTranslate : item }} {{ item.date ? (item.date | dfnsParseIso | dfnsFormatPure : 'Pp') :
|
||||||
|
'' }}
|
||||||
|
</h2>
|
||||||
<assessment-base-info [item]="item"></assessment-base-info>
|
<assessment-base-info [item]="item"></assessment-base-info>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,10 +12,8 @@
|
|||||||
* 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 {NgModule} from '@angular/core';
|
import {NgModule} from '@angular/core';
|
||||||
import {ScheduleSyncService} from './schedule/schedule-sync.service';
|
import {ScheduleSyncService} from './schedule/schedule-sync.service';
|
||||||
import {DateFormatPipe, DurationPipe} from 'ngx-moment';
|
|
||||||
import {CalendarModule} from '../calendar/calendar.module';
|
import {CalendarModule} from '../calendar/calendar.module';
|
||||||
import {ScheduleProvider} from '../calendar/schedule.provider';
|
import {ScheduleProvider} from '../calendar/schedule.provider';
|
||||||
import {StorageProvider} from '../storage/storage.provider';
|
import {StorageProvider} from '../storage/storage.provider';
|
||||||
@@ -27,13 +25,6 @@ import {CalendarService} from '../calendar/calendar.service';
|
|||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [],
|
declarations: [],
|
||||||
imports: [CalendarModule],
|
imports: [CalendarModule],
|
||||||
providers: [
|
providers: [ScheduleProvider, StorageProvider, CalendarService, ScheduleSyncService],
|
||||||
DurationPipe,
|
|
||||||
DateFormatPipe,
|
|
||||||
ScheduleProvider,
|
|
||||||
StorageProvider,
|
|
||||||
CalendarService,
|
|
||||||
ScheduleSyncService,
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
export class BackgroundModule {}
|
export class BackgroundModule {}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import {
|
|||||||
import {SCDateSeries, SCThingType, SCUuid} from '@openstapps/core';
|
import {SCDateSeries, SCThingType, SCUuid} from '@openstapps/core';
|
||||||
import {LocalNotifications} from '@capacitor/local-notifications';
|
import {LocalNotifications} from '@capacitor/local-notifications';
|
||||||
import {ThingTranslateService} from '../../../translation/thing-translate.service';
|
import {ThingTranslateService} from '../../../translation/thing-translate.service';
|
||||||
import {DateFormatPipe, DurationPipe} from 'ngx-moment';
|
|
||||||
import {BackgroundFetch} from '@transistorsoft/capacitor-background-fetch';
|
import {BackgroundFetch} from '@transistorsoft/capacitor-background-fetch';
|
||||||
import {StorageProvider} from '../../storage/storage.provider';
|
import {StorageProvider} from '../../storage/storage.provider';
|
||||||
import {CalendarService} from '../../calendar/calendar.service';
|
import {CalendarService} from '../../calendar/calendar.service';
|
||||||
@@ -46,8 +45,6 @@ export class ScheduleSyncService {
|
|||||||
private scheduleProvider: ScheduleProvider,
|
private scheduleProvider: ScheduleProvider,
|
||||||
private storageProvider: StorageProvider,
|
private storageProvider: StorageProvider,
|
||||||
private translator: ThingTranslateService,
|
private translator: ThingTranslateService,
|
||||||
private dateFormatPipe: DateFormatPipe,
|
|
||||||
private durationFormatPipe: DurationPipe,
|
|
||||||
private calendar: CalendarService,
|
private calendar: CalendarService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
@@ -136,11 +133,7 @@ export class ScheduleSyncService {
|
|||||||
change =>
|
change =>
|
||||||
`${
|
`${
|
||||||
this.translator.translator.translatedPropertyNames<SCDateSeries>(SCThingType.DateSeries)?.[change]
|
this.translator.translator.translatedPropertyNames<SCDateSeries>(SCThingType.DateSeries)?.[change]
|
||||||
}: ${formatRelevantKeys[change](
|
}: ${formatRelevantKeys[change](changes.new[change] as never)}`,
|
||||||
changes.new[change] as never,
|
|
||||||
this.dateFormatPipe,
|
|
||||||
this.durationFormatPipe,
|
|
||||||
)}`,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import {
|
|||||||
toICal,
|
toICal,
|
||||||
toICalUpdates,
|
toICalUpdates,
|
||||||
} from './ical/ical';
|
} from './ical/ical';
|
||||||
import moment from 'moment';
|
|
||||||
import {Share} from '@capacitor/share';
|
import {Share} from '@capacitor/share';
|
||||||
import {Directory, Encoding, Filesystem} from '@capacitor/filesystem';
|
import {Directory, Encoding, Filesystem} from '@capacitor/filesystem';
|
||||||
import {Device} from '@capacitor/device';
|
import {Device} from '@capacitor/device';
|
||||||
@@ -44,8 +43,6 @@ interface ICalInfo {
|
|||||||
styleUrls: ['add-event-review-modal.scss'],
|
styleUrls: ['add-event-review-modal.scss'],
|
||||||
})
|
})
|
||||||
export class AddEventReviewModalComponent implements OnInit {
|
export class AddEventReviewModalComponent implements OnInit {
|
||||||
moment = moment;
|
|
||||||
|
|
||||||
@Input() dismissAction: () => void;
|
@Input() dismissAction: () => void;
|
||||||
|
|
||||||
@Input() dateSeries: SCDateSeries[];
|
@Input() dateSeries: SCDateSeries[];
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
<s *ngIf="iCalEvent.cancelled; else date"
|
<s *ngIf="iCalEvent.cancelled; else date"
|
||||||
><ng-container [ngTemplateOutlet]="date"></ng-container>
|
><ng-container [ngTemplateOutlet]="date"></ng-container>
|
||||||
</s>
|
</s>
|
||||||
<ng-template #date> {{ moment(iCalEvent.start) | amDateFormat : 'll, HH:mm' }} </ng-template>
|
<ng-template #date> {{ iCalEvent.start | dfnsParseIso | dfnsFormatPure : 'PPPp' }} </ng-template>
|
||||||
</ion-label>
|
</ion-label>
|
||||||
<ion-note *ngIf="iCalEvent.rrule">
|
<ion-note *ngIf="iCalEvent.rrule">
|
||||||
{{ iCalEvent.rrule.interval }} {{ iCalEvent.rrule.freq | sentencecase }}
|
{{ iCalEvent.rrule.interval }} {{ iCalEvent.rrule.freq | sentencecase }}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
* 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 {NgModule} from '@angular/core';
|
import {NgModule} from '@angular/core';
|
||||||
import {AddEventReviewModalComponent} from './add-event-review-modal.component';
|
import {AddEventReviewModalComponent} from './add-event-review-modal.component';
|
||||||
import {Calendar} from '@awesome-cordova-plugins/calendar/ngx';
|
import {Calendar} from '@awesome-cordova-plugins/calendar/ngx';
|
||||||
@@ -23,9 +22,9 @@ import {TranslateModule} from '@ngx-translate/core';
|
|||||||
import {ThingTranslateModule} from '../../translation/thing-translate.module';
|
import {ThingTranslateModule} from '../../translation/thing-translate.module';
|
||||||
import {FormsModule} from '@angular/forms';
|
import {FormsModule} from '@angular/forms';
|
||||||
import {CommonModule} from '@angular/common';
|
import {CommonModule} from '@angular/common';
|
||||||
import {MomentModule} from 'ngx-moment';
|
|
||||||
import {UtilModule} from '../../util/util.module';
|
import {UtilModule} from '../../util/util.module';
|
||||||
import {IonIconModule} from '../../util/ion-icon/ion-icon.module';
|
import {IonIconModule} from '../../util/ion-icon/ion-icon.module';
|
||||||
|
import {FormatPurePipeModule, ParseIsoPipeModule} from 'ngx-date-fns';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [AddEventReviewModalComponent],
|
declarations: [AddEventReviewModalComponent],
|
||||||
@@ -36,8 +35,9 @@ import {IonIconModule} from '../../util/ion-icon/ion-icon.module';
|
|||||||
IonIconModule,
|
IonIconModule,
|
||||||
FormsModule,
|
FormsModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
MomentModule,
|
|
||||||
UtilModule,
|
UtilModule,
|
||||||
|
ParseIsoPipeModule,
|
||||||
|
FormatPurePipeModule,
|
||||||
],
|
],
|
||||||
exports: [],
|
exports: [],
|
||||||
providers: [Calendar, CalendarService, ScheduleProvider],
|
providers: [Calendar, CalendarService, ScheduleProvider],
|
||||||
|
|||||||
@@ -16,17 +16,18 @@
|
|||||||
import {Calendar} from '@awesome-cordova-plugins/calendar/ngx';
|
import {Calendar} from '@awesome-cordova-plugins/calendar/ngx';
|
||||||
import {Injectable} from '@angular/core';
|
import {Injectable} from '@angular/core';
|
||||||
import {ICalEvent} from './ical/ical';
|
import {ICalEvent} from './ical/ical';
|
||||||
import moment, {duration, Moment, unitOfTime} from 'moment';
|
|
||||||
import {Dialog} from '@capacitor/dialog';
|
import {Dialog} from '@capacitor/dialog';
|
||||||
import {CalendarInfo} from './calendar-info';
|
import {CalendarInfo} from './calendar-info';
|
||||||
import {Subject} from 'rxjs';
|
import {Subject} from 'rxjs';
|
||||||
import {ConfigProvider} from '../config/config.provider';
|
import {ConfigProvider} from '../config/config.provider';
|
||||||
|
import {add, differenceInDays, parseISO, startOfToday} from 'date-fns';
|
||||||
|
import {parse as parseISODuration} from 'duration-fns';
|
||||||
|
|
||||||
const RECURRENCE_PATTERNS: Partial<Record<unitOfTime.Diff, string | undefined>> = {
|
const RECURRENCE_PATTERNS: Partial<Record<keyof Duration, string | undefined>> = {
|
||||||
year: 'yearly',
|
years: 'yearly',
|
||||||
month: 'monthly',
|
months: 'monthly',
|
||||||
week: 'weekly',
|
weeks: 'weekly',
|
||||||
day: 'daily',
|
days: 'daily',
|
||||||
};
|
};
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@@ -85,7 +86,7 @@ export class CalendarService {
|
|||||||
iCalEvent.geo,
|
iCalEvent.geo,
|
||||||
iCalEvent.description,
|
iCalEvent.description,
|
||||||
new Date(start),
|
new Date(start),
|
||||||
moment(start).add(duration(iCalEvent.duration)).toDate(),
|
add(parseISO(start), parseISODuration(iCalEvent.duration!)),
|
||||||
{
|
{
|
||||||
id: `${iCalEvent.uuid}-${start}`,
|
id: `${iCalEvent.uuid}-${start}`,
|
||||||
url: iCalEvent.url,
|
url: iCalEvent.url,
|
||||||
@@ -107,8 +108,8 @@ export class CalendarService {
|
|||||||
* Emit the calendar index corresponding to the input date.
|
* Emit the calendar index corresponding to the input date.
|
||||||
* @param date Moment - date the calendar should go to
|
* @param date Moment - date the calendar should go to
|
||||||
*/
|
*/
|
||||||
emitGoToDate(date: Moment) {
|
emitGoToDate(date: Date) {
|
||||||
const index = date.diff(moment().startOf('day'), 'days');
|
const index = differenceInDays(date, startOfToday());
|
||||||
this.goToDate.next(index);
|
this.goToDate.next(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,61 +13,59 @@
|
|||||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
import {findRRules, RRule} from './ical';
|
import {findRRules, RRule} from './ical';
|
||||||
import moment, {unitOfTime} from 'moment';
|
|
||||||
import {SCISO8601Date} from '@openstapps/core';
|
import {SCISO8601Date} from '@openstapps/core';
|
||||||
import {shuffle} from '@openstapps/collection-utils';
|
import {shuffle} from '@openstapps/collection-utils';
|
||||||
|
import {add, addWeeks, formatISO, isEqual, parseISO} from 'date-fns';
|
||||||
|
import {normalize} from 'duration-fns';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function expandRRule(rule: RRule): SCISO8601Date[] {
|
function expandRRule(rule: RRule): SCISO8601Date[] {
|
||||||
const initial = moment(rule.from);
|
const initial = parseISO(rule.from);
|
||||||
const interval = rule.interval ?? 1;
|
const interval = rule.interval ?? 1;
|
||||||
|
const dates = [initial];
|
||||||
|
while (!isEqual(dates.at(-1)!, parseISO(rule.until))) {
|
||||||
|
dates.push(add(dates.at(-1)!, normalize({[rule.freq ?? 'days']: interval}, dates.at(-1))));
|
||||||
|
}
|
||||||
|
|
||||||
return shuffle(
|
return shuffle(dates.map(date => formatISO(date)));
|
||||||
Array.from({
|
|
||||||
length: Math.floor(moment(rule.until).diff(initial, rule.freq, true) / interval) + 1,
|
|
||||||
}).map((_, i) =>
|
|
||||||
initial
|
|
||||||
.clone()
|
|
||||||
.add(interval * i, rule.freq ?? 'day')
|
|
||||||
.toISOString(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('iCal', () => {
|
describe('iCal', () => {
|
||||||
it('should find simple recurrence patterns', () => {
|
for (const freq of ['days', 'weeks', 'months', 'years'] as const) {
|
||||||
for (const freq of ['day', 'week', 'month', 'year'] as unitOfTime.Diff[]) {
|
for (const interval of [1, 2, 3]) {
|
||||||
for (const interval of [1, 2, 3]) {
|
it(`should find ${interval} ${freq} recurrence patterns`, () => {
|
||||||
const pattern: RRule = {
|
const pattern: RRule = {
|
||||||
freq: freq,
|
freq: freq,
|
||||||
interval: interval,
|
interval: interval,
|
||||||
from: moment('2021-09-01T10:00').toISOString(),
|
from: formatISO(parseISO('2021-09-01T10:00Z')),
|
||||||
until: moment('2021-09-01T10:00')
|
until: formatISO(
|
||||||
.add(4 * interval, freq)
|
add(parseISO('2021-09-01T10:00Z'), normalize({[freq]: 4 * interval}, '2021-09-01')),
|
||||||
.toISOString(),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(expandRRule(pattern));
|
||||||
|
|
||||||
expect(findRRules(expandRRule(pattern))).toEqual([pattern]);
|
expect(findRRules(expandRRule(pattern))).toEqual([pattern]);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
it('should find missing recurrence patterns', () => {
|
it('should find missing recurrence patterns', () => {
|
||||||
const pattern: SCISO8601Date = moment('2021-09-01T10:00').toISOString();
|
const pattern: SCISO8601Date = formatISO(parseISO('2021-09-01T10:00'));
|
||||||
|
|
||||||
expect(findRRules([pattern])).toEqual([pattern]);
|
expect(findRRules([pattern])).toEqual([pattern]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should find mixed recurrence patterns', () => {
|
it('should find mixed recurrence patterns', () => {
|
||||||
const singlePattern: SCISO8601Date = moment('2021-09-01T09:00').toISOString();
|
const singlePattern: SCISO8601Date = formatISO(parseISO('2021-09-01T09:00'));
|
||||||
|
|
||||||
const weeklyPattern: RRule = {
|
const weeklyPattern: RRule = {
|
||||||
freq: 'week',
|
freq: 'weeks',
|
||||||
interval: 1,
|
interval: 1,
|
||||||
from: moment('2021-09-03T10:00').toISOString(),
|
from: formatISO(parseISO('2021-09-03T10:00')),
|
||||||
until: moment('2021-09-03T10:00').add(4, 'weeks').toISOString(),
|
until: formatISO(addWeeks(parseISO('2021-09-03T10:00'), 4)),
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(findRRules(shuffle([singlePattern, ...expandRRule(weeklyPattern)]))).toEqual([
|
expect(findRRules(shuffle([singlePattern, ...expandRRule(weeklyPattern)]))).toEqual([
|
||||||
|
|||||||
@@ -20,8 +20,10 @@ import {
|
|||||||
SCThingWithCategories,
|
SCThingWithCategories,
|
||||||
SCUuid,
|
SCUuid,
|
||||||
} from '@openstapps/core';
|
} from '@openstapps/core';
|
||||||
import moment, {unitOfTime} from 'moment';
|
|
||||||
import {minBy, mapValues} from '@openstapps/collection-utils';
|
import {minBy, mapValues} from '@openstapps/collection-utils';
|
||||||
|
import type {Duration} from 'date-fns';
|
||||||
|
import {formatISO, intervalToDuration, parseISO} from 'date-fns';
|
||||||
|
import {toUnit} from 'duration-fns';
|
||||||
|
|
||||||
export interface ICalEvent {
|
export interface ICalEvent {
|
||||||
name?: string;
|
name?: string;
|
||||||
@@ -55,19 +57,25 @@ export type ICalLike = ICalKeyValuePair[];
|
|||||||
function timeDistance(
|
function timeDistance(
|
||||||
current: SCISO8601Date,
|
current: SCISO8601Date,
|
||||||
next: SCISO8601Date | undefined,
|
next: SCISO8601Date | undefined,
|
||||||
recurrence: unitOfTime.Diff,
|
recurrence: keyof Duration,
|
||||||
): number | undefined {
|
): number | undefined {
|
||||||
if (!next) {
|
if (!next) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const diff = moment(next).diff(moment(current), recurrence, true);
|
const diff = toUnit(
|
||||||
|
intervalToDuration({
|
||||||
|
start: parseISO(next),
|
||||||
|
end: parseISO(current),
|
||||||
|
}),
|
||||||
|
recurrence,
|
||||||
|
);
|
||||||
|
|
||||||
return Math.floor(diff) === diff ? diff : undefined;
|
return Math.floor(diff) === diff ? diff : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RRule {
|
export interface RRule {
|
||||||
freq: unitOfTime.Diff; // 'SECONDLY' | 'HOURLY' | 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY';
|
freq: keyof Duration;
|
||||||
interval: number;
|
interval: number;
|
||||||
from: SCISO8601Date;
|
from: SCISO8601Date;
|
||||||
until: SCISO8601Date;
|
until: SCISO8601Date;
|
||||||
@@ -97,7 +105,7 @@ export function mergeRRules(rules: Array<RRule | SCISO8601Date>, allowExceptions
|
|||||||
* Find RRules in a list of dates
|
* Find RRules in a list of dates
|
||||||
*/
|
*/
|
||||||
export function findRRules(dates: SCISO8601Date[]): Array<RRule | SCISO8601Date> {
|
export function findRRules(dates: SCISO8601Date[]): Array<RRule | SCISO8601Date> {
|
||||||
const sorted = dates.sort((a, b) => moment(a).unix() - moment(b).unix());
|
const sorted = dates.sort();
|
||||||
|
|
||||||
const output: Optional<RRule, 'freq'>[] = [
|
const output: Optional<RRule, 'freq'>[] = [
|
||||||
{
|
{
|
||||||
@@ -112,7 +120,9 @@ export function findRRules(dates: SCISO8601Date[]): Array<RRule | SCISO8601Date>
|
|||||||
const next = sorted[i + 1] as SCISO8601Date | undefined;
|
const next = sorted[i + 1] as SCISO8601Date | undefined;
|
||||||
const element = output.at(-1);
|
const element = output.at(-1);
|
||||||
|
|
||||||
const units: unitOfTime.Diff[] = element?.freq ? [element.freq] : ['day', 'week', 'month', 'year'];
|
const units: Array<keyof Duration> = element?.freq
|
||||||
|
? [element.freq]
|
||||||
|
: ['days', 'weeks', 'months', 'years'];
|
||||||
const freq = minBy(
|
const freq = minBy(
|
||||||
units.map(recurrence => ({
|
units.map(recurrence => ({
|
||||||
recurrence: recurrence,
|
recurrence: recurrence,
|
||||||
@@ -226,14 +236,14 @@ export function toICalUpdates(dateSeries: SCDateSeries, translator: SCThingTrans
|
|||||||
export function iso8601ToICalDateTime<T extends SCISO8601Date | undefined>(
|
export function iso8601ToICalDateTime<T extends SCISO8601Date | undefined>(
|
||||||
date: T,
|
date: T,
|
||||||
): T extends SCISO8601Date ? string : undefined {
|
): T extends SCISO8601Date ? string : undefined {
|
||||||
return (date ? `${moment(date).utc().format('YYYYMMDDTHHmmss')}Z` : undefined) as never;
|
return (date ? formatISO(parseISO(date), {format: 'basic'}) : undefined) as never;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert an ISO8601 date to a string in the format YYYYMMDD
|
* Convert an ISO8601 date to a string in the format YYYYMMDD
|
||||||
*/
|
*/
|
||||||
export function iso8601ToICalDate(date: SCISO8601Date): string {
|
export function iso8601ToICalDate(date: SCISO8601Date): string {
|
||||||
return `${moment(date).utc().format('YYYYMMDD')}`;
|
return formatISO(parseISO(date), {format: 'basic', representation: 'date'});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -266,11 +276,11 @@ export function normalizeICalDates(iCal: ICalEvent): ICalEvent {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const REPEAT_FREQUENCIES: Partial<Record<unitOfTime.Diff, string>> = {
|
const REPEAT_FREQUENCIES: Partial<Record<keyof Duration, string>> = {
|
||||||
day: 'DAILY',
|
days: 'DAILY',
|
||||||
week: 'WEEKLY',
|
weeks: 'WEEKLY',
|
||||||
month: 'MONTHLY',
|
months: 'MONTHLY',
|
||||||
year: 'YEARLY',
|
years: 'YEARLY',
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -308,7 +318,7 @@ export function serializeICalEvent(iCal: ICalEvent): ICalLike {
|
|||||||
'BEGIN:VEVENT',
|
'BEGIN:VEVENT',
|
||||||
`DTSTART:${normalized.start}`,
|
`DTSTART:${normalized.start}`,
|
||||||
`DURATION:${normalized.duration}`,
|
`DURATION:${normalized.duration}`,
|
||||||
`DTSTAMP:${moment().utc().format('YYYYMMDDTHHmmss')}Z`,
|
`DTSTAMP:${formatISO(Date.now(), {format: 'basic'})}`,
|
||||||
`UID:${normalized.uuid}`,
|
`UID:${normalized.uuid}`,
|
||||||
`RECURRENCE-ID:${normalized.recurrenceId}`,
|
`RECURRENCE-ID:${normalized.recurrenceId}`,
|
||||||
`CATEGORIES:${normalized.categories?.join(',')}`,
|
`CATEGORIES:${normalized.categories?.join(',')}`,
|
||||||
|
|||||||
@@ -26,9 +26,10 @@ import {
|
|||||||
import {BehaviorSubject, Observable} from 'rxjs';
|
import {BehaviorSubject, Observable} from 'rxjs';
|
||||||
import {DataProvider} from '../data/data.provider';
|
import {DataProvider} from '../data/data.provider';
|
||||||
import {map} from 'rxjs/operators';
|
import {map} from 'rxjs/operators';
|
||||||
import {DateFormatPipe, DurationPipe} from 'ngx-moment';
|
|
||||||
import {pick} from '@openstapps/collection-utils';
|
import {pick} from '@openstapps/collection-utils';
|
||||||
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
|
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
|
||||||
|
import {format, formatDuration, parseISO} from 'date-fns';
|
||||||
|
import {parse as parseISODuration} from 'duration-fns';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -48,17 +49,13 @@ export const dateSeriesRelevantKeys: Array<DateSeriesRelevantKeys> = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
export const formatRelevantKeys: {
|
export const formatRelevantKeys: {
|
||||||
[key in DateSeriesRelevantKeys]: (
|
[key in DateSeriesRelevantKeys]: (value: SCDateSeries[key]) => string;
|
||||||
value: SCDateSeries[key],
|
|
||||||
dateFormatter: DateFormatPipe,
|
|
||||||
durationFormatter: DurationPipe,
|
|
||||||
) => string;
|
|
||||||
} = {
|
} = {
|
||||||
uid: value => value,
|
uid: value => value,
|
||||||
dates: (value, dateFormatter) => `[${value.map(it => dateFormatter.transform(it)).join(', ')}]`,
|
dates: value => `[${value.map(it => format(parseISO(it), 'PPp')).join(', ')}]`,
|
||||||
exceptions: (value, dateFormatter) => `[${value?.map(it => dateFormatter.transform(it)).join(', ') ?? ''}]`,
|
exceptions: value => `[${value?.map(it => format(parseISO(it), 'PPp')).join(', ') ?? ''}]`,
|
||||||
repeatFrequency: (value, _, durationFormatter) => durationFormatter.transform(value),
|
repeatFrequency: value => (value ? formatDuration(parseISODuration(value)) : ''),
|
||||||
duration: (value, _, durationFormatter) => durationFormatter.transform(value),
|
duration: value => formatDuration(parseISODuration(value)),
|
||||||
};
|
};
|
||||||
|
|
||||||
export type DateSeriesRelevantData = Pick<SCDateSeries, DateSeriesRelevantKeys>;
|
export type DateSeriesRelevantData = Pick<SCDateSeries, DateSeriesRelevantKeys>;
|
||||||
|
|||||||
@@ -15,11 +15,11 @@
|
|||||||
import {Component, OnInit} from '@angular/core';
|
import {Component, OnInit} from '@angular/core';
|
||||||
import {Router, ActivatedRoute} from '@angular/router';
|
import {Router, ActivatedRoute} from '@angular/router';
|
||||||
import {SCCatalog, SCSemester} from '@openstapps/core';
|
import {SCCatalog, SCSemester} from '@openstapps/core';
|
||||||
import moment from 'moment';
|
|
||||||
import {CatalogProvider} from './catalog.provider';
|
import {CatalogProvider} from './catalog.provider';
|
||||||
import {NGXLogger} from 'ngx-logger';
|
import {NGXLogger} from 'ngx-logger';
|
||||||
import {Location} from '@angular/common';
|
import {Location} from '@angular/common';
|
||||||
import {DataRoutingService} from '../data/data-routing.service';
|
import {DataRoutingService} from '../data/data-routing.service';
|
||||||
|
import {formatISO, startOfToday} from 'date-fns';
|
||||||
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
|
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -98,7 +98,7 @@ export class CatalogComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fetchSemesters(): Promise<void> {
|
async fetchSemesters(): Promise<void> {
|
||||||
const today = moment().startOf('day').toISOString();
|
const today = formatISO(startOfToday());
|
||||||
const semesters = await this.catalogProvider.getRelevantSemesters();
|
const semesters = await this.catalogProvider.getRelevantSemesters();
|
||||||
const currentSemester = semesters.find(
|
const currentSemester = semesters.find(
|
||||||
semester => semester.startDate <= today && semester.endDate > today,
|
semester => semester.startDate <= today && semester.endDate > today,
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import {FormsModule} from '@angular/forms';
|
|||||||
import {RouterModule, Routes} from '@angular/router';
|
import {RouterModule, Routes} from '@angular/router';
|
||||||
import {IonicModule} from '@ionic/angular';
|
import {IonicModule} from '@ionic/angular';
|
||||||
import {TranslateModule} from '@ngx-translate/core';
|
import {TranslateModule} from '@ngx-translate/core';
|
||||||
import {MomentModule} from 'ngx-moment';
|
|
||||||
import {DataModule} from '../data/data.module';
|
import {DataModule} from '../data/data.module';
|
||||||
import {SettingsProvider} from '../settings/settings.provider';
|
import {SettingsProvider} from '../settings/settings.provider';
|
||||||
import {CatalogComponent} from './catalog.component';
|
import {CatalogComponent} from './catalog.component';
|
||||||
@@ -42,7 +41,6 @@ const catalogRoutes: Routes = [
|
|||||||
RouterModule.forChild(catalogRoutes),
|
RouterModule.forChild(catalogRoutes),
|
||||||
IonIconModule,
|
IonIconModule,
|
||||||
CommonModule,
|
CommonModule,
|
||||||
MomentModule,
|
|
||||||
DataModule,
|
DataModule,
|
||||||
UtilModule,
|
UtilModule,
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
<ion-label>
|
<ion-label>
|
||||||
{{
|
{{
|
||||||
nextEvent
|
nextEvent
|
||||||
? (nextEvent!.dates | nextDateInList | amDateFormat : 'll, HH:mm')
|
? (nextEvent!.dates.sort().at(-1) | dfnsParseIso | dfnsFormatRelativePure : (now | async))
|
||||||
: ('dashboard.schedule.noEvent' | translate)
|
: ('dashboard.schedule.noEvent' | translate)
|
||||||
}}
|
}}
|
||||||
</ion-label>
|
</ion-label>
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user