From d839c536423ee651f52fa03f76695120ec159296 Mon Sep 17 00:00:00 2001
From: Jan Eitzinger
Date: Tue, 22 Aug 2023 10:56:32 +0200
Subject: [PATCH 001/120] Add initial structure
---
internal/tagger/apps/gromacs.txt | 0
internal/tagger/apps/openfoam.txt | 0
internal/tagger/apps/vasp.txt | 0
internal/tagger/detectApp.go | 20 ++++++++++++++++++++
internal/tagger/tagger.go | 17 +++++++++++++++++
5 files changed, 37 insertions(+)
create mode 100644 internal/tagger/apps/gromacs.txt
create mode 100644 internal/tagger/apps/openfoam.txt
create mode 100644 internal/tagger/apps/vasp.txt
create mode 100644 internal/tagger/detectApp.go
create mode 100644 internal/tagger/tagger.go
diff --git a/internal/tagger/apps/gromacs.txt b/internal/tagger/apps/gromacs.txt
new file mode 100644
index 0000000..e69de29
diff --git a/internal/tagger/apps/openfoam.txt b/internal/tagger/apps/openfoam.txt
new file mode 100644
index 0000000..e69de29
diff --git a/internal/tagger/apps/vasp.txt b/internal/tagger/apps/vasp.txt
new file mode 100644
index 0000000..e69de29
diff --git a/internal/tagger/detectApp.go b/internal/tagger/detectApp.go
new file mode 100644
index 0000000..298151b
--- /dev/null
+++ b/internal/tagger/detectApp.go
@@ -0,0 +1,20 @@
+// Copyright (C) 2023 NHR@FAU, University Erlangen-Nuremberg.
+// All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+package tagger
+
+const tagType = "app"
+
+type appInfo struct {
+ tag string
+ strings []string
+}
+type AppTagger struct {
+ apps []appInfo
+}
+
+func (t *AppTagger) Register() error {
+
+ return nil
+}
diff --git a/internal/tagger/tagger.go b/internal/tagger/tagger.go
new file mode 100644
index 0000000..52a369b
--- /dev/null
+++ b/internal/tagger/tagger.go
@@ -0,0 +1,17 @@
+// Copyright (C) 2023 NHR@FAU, University Erlangen-Nuremberg.
+// All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+package tagger
+
+import "github.com/ClusterCockpit/cc-backend/pkg/schema"
+
+type Tagger interface {
+ Register() error
+ Match(job *schema.Job)
+}
+
+func Init() error {
+
+ return nil
+}
From dc0d9fe038a0a940d1b00ceb24f259721e3a293c Mon Sep 17 00:00:00 2001
From: Jan Eitzinger
Date: Wed, 27 Sep 2023 15:01:08 +0200
Subject: [PATCH 002/120] Add more tags to test db
---
internal/repository/testdata/job.db | Bin 114688 -> 114688 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/internal/repository/testdata/job.db b/internal/repository/testdata/job.db
index 4b00aa55f041b70f717177bc7baef9eb69d1a226..4685f7f85704574eab5cbd27a08f41eb71bf719d 100644
GIT binary patch
delta 240
zcmZo@U~gz(-@xL)!Nk9ff&V7|w#|Y9tN4`_nOGUbMU4v*OEU5^Q*u&`42+C*4J>ty
z%oPlctV}Je49zFs^w$RJy3fFWpZ^_D*JXZwJ{ECNMz|iP$?xLDxS07jGVnj;Kh3`p
zsAe&LtOPR)Bd0M7vVq1{1_oA!h7wF58CDD#15-&x7Dh&6RwiUApern`Of0z=7#NuO
oUo-H(=KsY16KKUjt@f&b=aL4ou9lW+QK1NrY5_}>BfPxvRlix=Z!5MW^7{{n>X
y!D2G3oD2*MJe+Jml8uvv3rK-geC7v2po&NQ0&I-TKtWzcHYSLgriNt=j1B+{bsGKv
From ba7cc9168e74a925c06ac108355b221d5fdf0e88 Mon Sep 17 00:00:00 2001
From: Jan Eitzinger
Date: Thu, 28 Sep 2023 10:20:20 +0200
Subject: [PATCH 003/120] feat: add automatic application detection and tagging
---
internal/repository/job_test.go | 30 +++++++++------
internal/repository/tags.go | 13 +++++++
internal/tagger/apps/gromacs.txt | 3 ++
internal/tagger/apps/openfoam.txt | 1 +
internal/tagger/apps/vasp.txt | 2 +
internal/tagger/detectApp.go | 64 +++++++++++++++++++++++++++++++
internal/tagger/detectApp_test.go | 59 ++++++++++++++++++++++++++++
7 files changed, 161 insertions(+), 11 deletions(-)
create mode 100644 internal/tagger/detectApp_test.go
diff --git a/internal/repository/job_test.go b/internal/repository/job_test.go
index c3f76a7..986365c 100644
--- a/internal/repository/job_test.go
+++ b/internal/repository/job_test.go
@@ -16,9 +16,7 @@ func TestFind(t *testing.T) {
jobId, cluster, startTime := int64(398998), "fritz", int64(1675957496)
job, err := r.Find(&jobId, &cluster, &startTime)
- if err != nil {
- t.Fatal(err)
- }
+ noErr(t, err)
// fmt.Printf("%+v", job)
@@ -31,9 +29,7 @@ func TestFindById(t *testing.T) {
r := setup(t)
job, err := r.FindById(5)
- if err != nil {
- t.Fatal(err)
- }
+ noErr(t, err)
// fmt.Printf("%+v", job)
@@ -46,14 +42,26 @@ func TestGetTags(t *testing.T) {
r := setup(t)
tags, counts, err := r.CountTags(nil)
- if err != nil {
- t.Fatal(err)
- }
+ noErr(t, err)
fmt.Printf("TAGS %+v \n", tags)
// fmt.Printf("COUNTS %+v \n", counts)
- if counts["bandwidth"] != 0 {
- t.Errorf("wrong tag count \ngot: %d \nwant: 0", counts["bandwidth"])
+ if counts["bandwidth"] != 2 {
+ t.Errorf("wrong tag count \ngot: %d \nwant: 2", counts["bandwidth"])
+ }
+}
+
+func TestHasTag(t *testing.T) {
+ r := setup(t)
+
+ if !r.HasTag(5, "util", "bandwidth") {
+ t.Errorf("Expected has tag")
+ }
+ if r.HasTag(4, "patho", "idle") {
+ t.Errorf("Expected has not tag")
+ }
+ if !r.HasTag(5, "patho", "idle") {
+ t.Errorf("Expected has tag")
}
}
diff --git a/internal/repository/tags.go b/internal/repository/tags.go
index 52bc836..a6a41b6 100644
--- a/internal/repository/tags.go
+++ b/internal/repository/tags.go
@@ -134,6 +134,19 @@ func (r *JobRepository) AddTagOrCreate(jobId int64, tagType string, tagName stri
return tagId, nil
}
+func (r *JobRepository) HasTag(jobId int64, tagType string, tagName string) bool {
+ var id int64
+ q := sq.Select("id").From("tag").Join("jobtag ON jobtag.tag_id = tag.id").
+ Where("jobtag.job_id = ?", jobId).Where("tag.tag_type = ?", tagType).
+ Where("tag.tag_name = ?", tagName)
+ err := q.RunWith(r.stmtCache).QueryRow().Scan(&id)
+ if err != nil {
+ return false
+ } else {
+ return true
+ }
+}
+
// TagId returns the database id of the tag with the specified type and name.
func (r *JobRepository) TagId(tagType string, tagName string) (tagId int64, exists bool) {
exists = true
diff --git a/internal/tagger/apps/gromacs.txt b/internal/tagger/apps/gromacs.txt
index e69de29..d8c0829 100644
--- a/internal/tagger/apps/gromacs.txt
+++ b/internal/tagger/apps/gromacs.txt
@@ -0,0 +1,3 @@
+GROMACS
+gromacs
+GMX
diff --git a/internal/tagger/apps/openfoam.txt b/internal/tagger/apps/openfoam.txt
index e69de29..542d645 100644
--- a/internal/tagger/apps/openfoam.txt
+++ b/internal/tagger/apps/openfoam.txt
@@ -0,0 +1 @@
+openfoam
diff --git a/internal/tagger/apps/vasp.txt b/internal/tagger/apps/vasp.txt
index e69de29..eec9092 100644
--- a/internal/tagger/apps/vasp.txt
+++ b/internal/tagger/apps/vasp.txt
@@ -0,0 +1,2 @@
+VASP
+vasp
diff --git a/internal/tagger/detectApp.go b/internal/tagger/detectApp.go
index 298151b..714fd27 100644
--- a/internal/tagger/detectApp.go
+++ b/internal/tagger/detectApp.go
@@ -4,17 +4,81 @@
// license that can be found in the LICENSE file.
package tagger
+import (
+ "bufio"
+ "embed"
+ "fmt"
+ "path/filepath"
+ "strings"
+
+ "github.com/ClusterCockpit/cc-backend/internal/repository"
+ "github.com/ClusterCockpit/cc-backend/pkg/log"
+ "github.com/ClusterCockpit/cc-backend/pkg/schema"
+)
+
const tagType = "app"
+//go:embed apps/*
+var appFiles embed.FS
+
type appInfo struct {
tag string
strings []string
}
+
type AppTagger struct {
apps []appInfo
}
func (t *AppTagger) Register() error {
+ files, err := appFiles.ReadDir("apps")
+ if err != nil {
+ return fmt.Errorf("error reading app folder: %#v", err)
+ }
+ t.apps = make([]appInfo, 0)
+
+ for _, fn := range files {
+ fns := fn.Name()
+ log.Debugf("Process: %s", fns)
+ f, err := appFiles.Open(fmt.Sprintf("apps/%s", fns))
+ if err != nil {
+ return fmt.Errorf("error opening app file %s: %#v", fns, err)
+ }
+ scanner := bufio.NewScanner(f)
+ ai := appInfo{tag: strings.TrimSuffix(fns, filepath.Ext(fns)), strings: make([]string, 0)}
+
+ for scanner.Scan() {
+ ai.strings = append(ai.strings, scanner.Text())
+ }
+ t.apps = append(t.apps, ai)
+ }
return nil
}
+
+func (t *AppTagger) Match(job *schema.Job) {
+ r := repository.GetJobRepository()
+ meta, err := r.FetchMetadata(job)
+ if err != nil {
+ log.Error("cannot fetch meta data")
+ }
+ jobscript, ok := meta["jobScript"]
+ if ok {
+ id := job.ID
+
+ out:
+ for _, a := range t.apps {
+ tag := a.tag
+ for _, s := range a.strings {
+ if strings.Contains(jobscript, s) {
+ if !r.HasTag(id, tagType, tag) {
+ r.AddTagOrCreate(id, tagType, tag)
+ break out
+ }
+ }
+ }
+ }
+ } else {
+ log.Infof("Cannot extract job script for job: %d on %s", job.JobID, job.Cluster)
+ }
+}
diff --git a/internal/tagger/detectApp_test.go b/internal/tagger/detectApp_test.go
new file mode 100644
index 0000000..54a8dfd
--- /dev/null
+++ b/internal/tagger/detectApp_test.go
@@ -0,0 +1,59 @@
+// Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg.
+// All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+package tagger
+
+import (
+ "testing"
+
+ "github.com/ClusterCockpit/cc-backend/internal/repository"
+ "github.com/ClusterCockpit/cc-backend/pkg/log"
+)
+
+func setup(tb testing.TB) *repository.JobRepository {
+ tb.Helper()
+ log.Init("warn", true)
+ dbfile := "../repository/testdata/job.db"
+ err := repository.MigrateDB("sqlite3", dbfile)
+ noErr(tb, err)
+ repository.Connect("sqlite3", dbfile)
+ return repository.GetJobRepository()
+}
+
+func noErr(tb testing.TB, err error) {
+ tb.Helper()
+
+ if err != nil {
+ tb.Fatal("Error is not nil:", err)
+ }
+}
+
+func TestRegister(t *testing.T) {
+ var tagger AppTagger
+
+ err := tagger.Register()
+ noErr(t, err)
+
+ if len(tagger.apps) != 3 {
+ t.Errorf("wrong summary for diagnostic \ngot: %d \nwant: 3", len(tagger.apps))
+ }
+}
+
+func TestMatch(t *testing.T) {
+ r := setup(t)
+
+ job, err := r.FindById(5)
+ noErr(t, err)
+
+ var tagger AppTagger
+
+ err = tagger.Register()
+ noErr(t, err)
+
+ tagger.Match(job)
+
+ if !r.HasTag(5, "app", "vasp") {
+ t.Errorf("missing tag vasp")
+ }
+}
From 2502989ca2c33d654f923687db8c53c5b44c8b5b Mon Sep 17 00:00:00 2001
From: Jan Eitzinger
Date: Thu, 28 Sep 2023 10:20:35 +0200
Subject: [PATCH 004/120] Refactor
---
pkg/schema/validate.go | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/pkg/schema/validate.go b/pkg/schema/validate.go
index aec234c..77b6dbb 100644
--- a/pkg/schema/validate.go
+++ b/pkg/schema/validate.go
@@ -28,12 +28,13 @@ const (
//go:embed schemas/*
var schemaFiles embed.FS
-func Validate(k Kind, r io.Reader) (err error) {
+func Validate(k Kind, r io.Reader) error {
jsonschema.Loaders["embedfs"] = func(s string) (io.ReadCloser, error) {
f := filepath.Join("schemas", strings.Split(s, "//")[1])
return schemaFiles.Open(f)
}
var s *jsonschema.Schema
+ var err error
switch k {
case Meta:
@@ -54,7 +55,7 @@ func Validate(k Kind, r io.Reader) (err error) {
}
var v interface{}
- if err := json.NewDecoder(r).Decode(&v); err != nil {
+ if err = json.NewDecoder(r).Decode(&v); err != nil {
log.Warnf("Error while decoding raw json schema: %#v", err)
return err
}
From efbe53b6b45a79fe432814189a5e99b2a9dbbaa4 Mon Sep 17 00:00:00 2001
From: AmritanshuV <88365075+AmritanshuV@users.noreply.github.com>
Date: Thu, 15 Aug 2024 12:40:57 +0200
Subject: [PATCH 005/120] Rules
---
internal/tagger/rules.json | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 internal/tagger/rules.json
diff --git a/internal/tagger/rules.json b/internal/tagger/rules.json
new file mode 100644
index 0000000..c88afb4
--- /dev/null
+++ b/internal/tagger/rules.json
@@ -0,0 +1,21 @@
+{
+ "and": [
+ {
+ "in": [
+ "a40",
+ {
+ "var": "metaData.jobScript"
+ }
+ ]
+ },
+ {
+ ">": [
+ {
+ "var": "statistics.clock.min"
+ },
+ 2000
+ ]
+ }
+ ]
+ }
+
\ No newline at end of file
From 5681062f01e37b4248310d4c751a6ca08379e1fa Mon Sep 17 00:00:00 2001
From: Christoph Kluge
Date: Mon, 3 Feb 2025 17:31:01 +0100
Subject: [PATCH 006/120] Initial migration to Svelte5 via full syntax
compatability
- updated all dependencies
- removed svelte-chartjs wrapper from dependencies
- sveltestrap causes compilation warnings (once)
- Header.svelte uses new Svelte5 syntax as example
- fixed most initial compilation warnings except circular dependencies with TBD cause
---
web/frontend/package-lock.json | 772 ++++++++++--------
web/frontend/package.json | 21 +-
web/frontend/src/Analysis.root.svelte | 1 +
web/frontend/src/Header.svelte | 34 +-
web/frontend/src/Status.root.svelte | 2 +
web/frontend/src/analysis.entrypoint.js | 3 +-
web/frontend/src/config.entrypoint.js | 3 +-
web/frontend/src/config/admin/AddUser.svelte | 14 +-
.../src/generic/joblist/JobInfo.svelte | 6 +-
.../src/generic/joblist/Pagination.svelte | 6 +-
.../src/generic/plots/Histogram.svelte | 2 +-
.../src/generic/plots/MetricPlot.svelte | 2 +-
web/frontend/src/generic/plots/Pie.svelte | 40 +-
web/frontend/src/generic/plots/Polar.svelte | 42 +-
.../src/generic/plots/Roofline.svelte | 2 +-
.../src/generic/select/MetricSelection.svelte | 11 +-
web/frontend/src/header.entrypoint.js | 9 +-
web/frontend/src/job.entrypoint.js | 3 +-
web/frontend/src/job/JobSummary.svelte | 1 +
web/frontend/src/job/StatsTableEntry.svelte | 38 +-
web/frontend/src/jobs.entrypoint.js | 3 +-
web/frontend/src/list.entrypoint.js | 3 +-
web/frontend/src/node.entrypoint.js | 3 +-
web/frontend/src/status.entrypoint.js | 3 +-
web/frontend/src/systems.entrypoint.js | 3 +-
.../src/systems/nodelist/NodeListRow.svelte | 2 +-
web/frontend/src/user.entrypoint.js | 3 +-
27 files changed, 561 insertions(+), 471 deletions(-)
diff --git a/web/frontend/package-lock.json b/web/frontend/package-lock.json
index 4b89d34..2507e9a 100644
--- a/web/frontend/package-lock.json
+++ b/web/frontend/package-lock.json
@@ -9,32 +9,31 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "@rollup/plugin-replace": "^5.0.7",
- "@sveltestrap/sveltestrap": "^6.2.7",
+ "@rollup/plugin-replace": "^6.0.2",
+ "@sveltestrap/sveltestrap": "^7.0.3",
"@urql/svelte": "^4.2.2",
- "chart.js": "^4.4.6",
- "date-fns": "^2.30.0",
- "graphql": "^16.9.0",
- "mathjs": "^12.4.3",
- "svelte-chartjs": "^3.1.5",
+ "chart.js": "^4.4.7",
+ "date-fns": "^4.1.0",
+ "graphql": "^16.10.0",
+ "mathjs": "^14.2.0",
"uplot": "^1.6.31",
"wonka": "^6.3.4"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.8",
- "@rollup/plugin-node-resolve": "^15.3.0",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-terser": "^0.4.4",
"@timohausmann/quadtree-js": "^1.2.6",
- "rollup": "^4.27.4",
+ "rollup": "^4.34.1",
"rollup-plugin-css-only": "^4.5.2",
"rollup-plugin-svelte": "^7.2.2",
- "svelte": "^4.2.19"
+ "svelte": "^5.19.6"
}
},
"node_modules/@0no-co/graphql.web": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.11.tgz",
- "integrity": "sha512-xuSJ9WXwTmtngWkbdEoopMo6F8NLtjy84UNAMsAr5C3/2SgAL/dEU10TMqTIsipqPQ8HA/7WzeqQ9DEQxSvPPA==",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.13.tgz",
+ "integrity": "sha512-jqYxOevheVTU1S36ZdzAkJIdvRp2m3OYIG5SEoKDw5NI8eVwkoI0D/Q3DYNGmXCxkA6CQuoa7zvMiDPTLqUNuw==",
"license": "MIT",
"peerDependencies": {
"graphql": "^14.0.0 || ^15.0.0 || ^16.0.0"
@@ -59,9 +58,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
- "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "version": "7.26.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz",
+ "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==",
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
@@ -71,9 +70,9 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
@@ -135,6 +134,19 @@
"integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
"license": "MIT"
},
+ "node_modules/@lambdatest/node-tunnel": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@lambdatest/node-tunnel/-/node-tunnel-4.0.8.tgz",
+ "integrity": "sha512-IY42aDD4Ryqjug9V4wpCjckKpHjC2zrU/XhhorR5ztX088XITRFKUo8U6+gOjy/V8kAB+EgDuIXfK0izXbt9Ow==",
+ "license": "ISC",
+ "dependencies": {
+ "adm-zip": "^0.5.10",
+ "axios": "^1.6.2",
+ "get-port": "^1.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "split": "^1.0.1"
+ }
+ },
"node_modules/@popperjs/core": {
"version": "2.11.8",
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
@@ -146,21 +158,22 @@
}
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "25.0.8",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz",
- "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==",
+ "version": "28.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz",
+ "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
"estree-walker": "^2.0.2",
- "glob": "^8.0.3",
+ "fdir": "^6.2.0",
"is-reference": "1.2.1",
- "magic-string": "^0.30.3"
+ "magic-string": "^0.30.3",
+ "picomatch": "^4.0.2"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16.0.0 || 14 >= 14.17"
},
"peerDependencies": {
"rollup": "^2.68.0||^3.0.0||^4.0.0"
@@ -172,9 +185,9 @@
}
},
"node_modules/@rollup/plugin-node-resolve": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz",
- "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==",
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
+ "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -197,9 +210,9 @@
}
},
"node_modules/@rollup/plugin-replace": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.7.tgz",
- "integrity": "sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz",
+ "integrity": "sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==",
"license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^5.0.1",
@@ -241,9 +254,9 @@
}
},
"node_modules/@rollup/pluginutils": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz",
- "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
+ "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
"license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0",
@@ -263,9 +276,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz",
- "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.1.tgz",
+ "integrity": "sha512-kwctwVlswSEsr4ljpmxKrRKp1eG1v2NAhlzFzDf1x1OdYaMjBYjDCbHkzWm57ZXzTwqn8stMXgROrnMw8dJK3w==",
"cpu": [
"arm"
],
@@ -277,9 +290,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz",
- "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.1.tgz",
+ "integrity": "sha512-4H5ZtZitBPlbPsTv6HBB8zh1g5d0T8TzCmpndQdqq20Ugle/nroOyDMf9p7f88Gsu8vBLU78/cuh8FYHZqdXxw==",
"cpu": [
"arm64"
],
@@ -291,9 +304,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz",
- "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.1.tgz",
+ "integrity": "sha512-f2AJ7Qwx9z25hikXvg+asco8Sfuc5NCLg8rmqQBIOUoWys5sb/ZX9RkMZDPdnnDevXAMJA5AWLnRBmgdXGEUiA==",
"cpu": [
"arm64"
],
@@ -305,9 +318,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz",
- "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.1.tgz",
+ "integrity": "sha512-+/2JBrRfISCsWE4aEFXxd+7k9nWGXA8+wh7ZUHn/u8UDXOU9LN+QYKKhd57sIn6WRcorOnlqPMYFIwie/OHXWw==",
"cpu": [
"x64"
],
@@ -319,9 +332,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz",
- "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.1.tgz",
+ "integrity": "sha512-SUeB0pYjIXwT2vfAMQ7E4ERPq9VGRrPR7Z+S4AMssah5EHIilYqjWQoTn5dkDtuIJUSTs8H+C9dwoEcg3b0sCA==",
"cpu": [
"arm64"
],
@@ -333,9 +346,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz",
- "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.1.tgz",
+ "integrity": "sha512-L3T66wAZiB/ooiPbxz0s6JEX6Sr2+HfgPSK+LMuZkaGZFAFCQAHiP3dbyqovYdNaiUXcl9TlgnIbcsIicAnOZg==",
"cpu": [
"x64"
],
@@ -347,9 +360,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz",
- "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.1.tgz",
+ "integrity": "sha512-UBXdQ4+ATARuFgsFrQ+tAsKvBi/Hly99aSVdeCUiHV9dRTTpMU7OrM3WXGys1l40wKVNiOl0QYY6cZQJ2xhKlQ==",
"cpu": [
"arm"
],
@@ -361,9 +374,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz",
- "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.1.tgz",
+ "integrity": "sha512-m/yfZ25HGdcCSwmopEJm00GP7xAUyVcBPjttGLRAqZ60X/bB4Qn6gP7XTwCIU6bITeKmIhhwZ4AMh2XLro+4+w==",
"cpu": [
"arm"
],
@@ -375,9 +388,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz",
- "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.1.tgz",
+ "integrity": "sha512-Wy+cUmFuvziNL9qWRRzboNprqSQ/n38orbjRvd6byYWridp5TJ3CD+0+HUsbcWVSNz9bxkDUkyASGP0zS7GAvg==",
"cpu": [
"arm64"
],
@@ -389,9 +402,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz",
- "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.1.tgz",
+ "integrity": "sha512-CQ3MAGgiFmQW5XJX5W3wnxOBxKwFlUAgSXFA2SwgVRjrIiVt5LHfcQLeNSHKq5OEZwv+VCBwlD1+YKCjDG8cpg==",
"cpu": [
"arm64"
],
@@ -402,10 +415,24 @@
"linux"
]
},
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.1.tgz",
+ "integrity": "sha512-rSzb1TsY4lSwH811cYC3OC2O2mzNMhM13vcnA7/0T6Mtreqr3/qs6WMDriMRs8yvHDI54qxHgOk8EV5YRAHFbw==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz",
- "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.1.tgz",
+ "integrity": "sha512-fwr0n6NS0pG3QxxlqVYpfiY64Fd1Dqd8Cecje4ILAV01ROMp4aEdCj5ssHjRY3UwU7RJmeWd5fi89DBqMaTawg==",
"cpu": [
"ppc64"
],
@@ -417,9 +444,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz",
- "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.1.tgz",
+ "integrity": "sha512-4uJb9qz7+Z/yUp5RPxDGGGUcoh0PnKF33QyWgEZ3X/GocpWb6Mb+skDh59FEt5d8+Skxqs9mng6Swa6B2AmQZg==",
"cpu": [
"riscv64"
],
@@ -431,9 +458,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz",
- "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.1.tgz",
+ "integrity": "sha512-QlIo8ndocWBEnfmkYqj8vVtIUpIqJjfqKggjy7IdUncnt8BGixte1wDON7NJEvLg3Kzvqxtbo8tk+U1acYEBlw==",
"cpu": [
"s390x"
],
@@ -445,9 +472,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz",
- "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.1.tgz",
+ "integrity": "sha512-hzpleiKtq14GWjz3ahWvJXgU1DQC9DteiwcsY4HgqUJUGxZThlL66MotdUEK9zEo0PK/2ADeZGM9LIondE302A==",
"cpu": [
"x64"
],
@@ -459,9 +486,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz",
- "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.1.tgz",
+ "integrity": "sha512-jqtKrO715hDlvUcEsPn55tZt2TEiBvBtCMkUuU0R6fO/WPT7lO9AONjPbd8II7/asSiNVQHCMn4OLGigSuxVQA==",
"cpu": [
"x64"
],
@@ -473,9 +500,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz",
- "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.1.tgz",
+ "integrity": "sha512-RnHy7yFf2Wz8Jj1+h8klB93N0NHNHXFhNwAmiy9zJdpY7DE01VbEVtPdrK1kkILeIbHGRJjvfBDBhnxBr8kD4g==",
"cpu": [
"arm64"
],
@@ -487,9 +514,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz",
- "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.1.tgz",
+ "integrity": "sha512-i7aT5HdiZIcd7quhzvwQ2oAuX7zPYrYfkrd1QFfs28Po/i0q6kas/oRrzGlDhAEyug+1UfUtkWdmoVlLJj5x9Q==",
"cpu": [
"ia32"
],
@@ -501,9 +528,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz",
- "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.1.tgz",
+ "integrity": "sha512-k3MVFD9Oq+laHkw2N2v7ILgoa9017ZMF/inTtHzyTVZjYs9cSH18sdyAf6spBAJIGwJ5UaC7et2ZH1WCdlhkMw==",
"cpu": [
"x64"
],
@@ -515,9 +542,9 @@
]
},
"node_modules/@sveltestrap/sveltestrap": {
- "version": "6.2.7",
- "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-6.2.7.tgz",
- "integrity": "sha512-WwLLfAFUb42BGuRrf3Vbct30bQMzlEMMipN/MfxhjuLTmLQeW9muVJfPyvjtWS+mY+RjkSCoHvAp/ZobP1NLlQ==",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/@sveltestrap/sveltestrap/-/sveltestrap-7.0.3.tgz",
+ "integrity": "sha512-lvZpVlq7pHVxJbjq2d6JAAr/Z1mkSaPOw3pwpZiuQ9FK97/Pr66m5Bf9qZIc1FUkLnbNiDtRAbhVyR8LVdr3FQ==",
"license": "MIT",
"dependencies": {
"@popperjs/core": "^2.11.8"
@@ -547,9 +574,9 @@
"license": "MIT"
},
"node_modules/@urql/core": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.0.8.tgz",
- "integrity": "sha512-1GOnUw7/a9bzkcM0+U8U5MmxW2A7FE5YquuEmcJzTtW5tIs2EoS4F2ITpuKBjRBbyRjZgO860nWFPo1m4JImGA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.1.0.tgz",
+ "integrity": "sha512-yC3sw8yqjbX45GbXxfiBY8GLYCiyW/hLBbQF9l3TJrv4ro00Y0ChkKaD9I2KntRxAVm9IYBqh0awX8fwWAe/Yw==",
"license": "MIT",
"dependencies": {
"@0no-co/graphql.web": "^1.0.5",
@@ -582,6 +609,36 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-typescript": {
+ "version": "1.4.13",
+ "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz",
+ "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": ">=8.9.0"
+ }
+ },
+ "node_modules/adm-zip": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz",
+ "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/aria-query": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
@@ -591,6 +648,23 @@
"node": ">= 0.4"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.7.9",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
+ "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
"node_modules/axobject-query": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
@@ -600,23 +674,6 @@
"node": ">= 0.4"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -625,9 +682,9 @@
"license": "MIT"
},
"node_modules/chart.js": {
- "version": "4.4.6",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz",
- "integrity": "sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==",
+ "version": "4.4.7",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.7.tgz",
+ "integrity": "sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==",
"license": "MIT",
"dependencies": {
"@kurkle/color": "^0.3.0"
@@ -636,26 +693,25 @@
"pnpm": ">=8"
}
},
- "node_modules/code-red": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
- "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15",
- "@types/estree": "^1.0.1",
- "acorn": "^8.10.0",
- "estree-walker": "^3.0.3",
- "periscopic": "^3.1.0"
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/code-red/node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.0"
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
"node_modules/commander": {
@@ -685,39 +741,37 @@
"url": "https://github.com/sponsors/rawify"
}
},
- "node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT",
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
}
},
- "node_modules/date-fns": {
- "version": "2.30.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
- "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "node_modules/debug": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.21.0"
+ "ms": "^2.1.3"
},
"engines": {
- "node": ">=0.11"
+ "node": ">=6.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/decimal.js": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
- "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
+ "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
"license": "MIT"
},
"node_modules/deepmerge": {
@@ -730,37 +784,103 @@
"node": ">=0.10.0"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/escape-latex": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz",
"integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==",
"license": "MIT"
},
+ "node_modules/esm-env": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
+ "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
+ "license": "MIT"
+ },
+ "node_modules/esrap": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.3.tgz",
+ "integrity": "sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"license": "MIT"
},
- "node_modules/fraction.js": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz",
- "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==",
+ "node_modules/fdir": {
+ "version": "6.4.3",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
+ "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
+ "dev": true,
"license": "MIT",
- "engines": {
- "node": "*"
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
},
- "funding": {
- "type": "patreon",
- "url": "https://github.com/sponsors/rawify"
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
}
},
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
- "license": "ISC"
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.2.1.tgz",
+ "integrity": "sha512-Ah6t/7YCYjrPUFUFsOsRLMXAdnYM+aQwmojD2Ayb/Ezr82SwES0vuyQ8qZ3QO8n9j7W14VJuVZZet8U3bhSdQQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/rawify"
+ }
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -787,31 +907,22 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
+ "node_modules/get-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-1.0.0.tgz",
+ "integrity": "sha512-vg59F3kcXBOtcIijwtdAyCxFocyv/fVkGQvw1kVGrxFO1U4SSGkGjrbASg5DN3TVekVle/jltwOjYRnZWc1YdA==",
+ "license": "MIT",
+ "bin": {
+ "get-port": "cli.js"
},
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">=0.10.0"
}
},
"node_modules/graphql": {
- "version": "16.9.0",
- "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz",
- "integrity": "sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==",
+ "version": "16.10.0",
+ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz",
+ "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==",
"license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
@@ -830,29 +941,23 @@
"node": ">= 0.4"
}
},
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "license": "ISC",
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
"dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
"node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -895,29 +1000,30 @@
"license": "MIT"
},
"node_modules/magic-string": {
- "version": "0.30.14",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz",
- "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==",
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/mathjs": {
- "version": "12.4.3",
- "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-12.4.3.tgz",
- "integrity": "sha512-oHdGPDbp7gO873xxG90RLq36IuicuKvbpr/bBG5g9c8Obm/VsKVrK9uoRZZHUodohzlnmCEqfDzbR3LH6m+aAQ==",
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-14.2.0.tgz",
+ "integrity": "sha512-CcJV1cQwRSrQIAAX3sWejFPUvUsQnTZYisEEuoMBw3gMDJDQzvKQlrul/vjKAbdtW7zaDzPCl04h1sf0wh41TA==",
"license": "Apache-2.0",
"dependencies": {
- "@babel/runtime": "^7.24.4",
- "complex.js": "^2.1.1",
+ "@babel/runtime": "^7.25.7",
+ "@lambdatest/node-tunnel": "^4.0.8",
+ "complex.js": "^2.2.5",
"decimal.js": "^10.4.3",
"escape-latex": "^1.2.0",
- "fraction.js": "4.3.4",
+ "fraction.js": "^5.2.1",
"javascript-natural-sort": "^0.7.1",
"seedrandom": "^3.0.5",
"tiny-emitter": "^2.1.0",
- "typed-function": "^4.1.1"
+ "typed-function": "^4.2.1"
},
"bin": {
"mathjs": "bin/cli.js"
@@ -926,34 +1032,32 @@
"node": ">= 18"
}
},
- "node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "license": "CC0-1.0"
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "license": "ISC",
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
"dependencies": {
- "brace-expansion": "^2.0.1"
+ "mime-db": "1.52.0"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.6"
}
},
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
},
"node_modules/path-parse": {
"version": "1.0.7",
@@ -962,35 +1066,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/periscopic": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
- "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^3.0.0",
- "is-reference": "^3.0.0"
- }
- },
- "node_modules/periscopic/node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
- "node_modules/periscopic/node_modules/is-reference": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
- "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.6"
- }
- },
"node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
@@ -1003,6 +1078,12 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -1020,27 +1101,30 @@
"license": "MIT"
},
"node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "is-core-module": "^2.16.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/resolve.exports": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
- "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -1048,9 +1132,9 @@
}
},
"node_modules/rollup": {
- "version": "4.27.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz",
- "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==",
+ "version": "4.34.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.1.tgz",
+ "integrity": "sha512-iYZ/+PcdLYSGfH3S+dGahlW/RWmsqDhLgj1BT9DH/xXJ0ggZN7xkdP9wipPNjjNLczI+fmMLmTB9pye+d2r4GQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -1064,24 +1148,25 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.27.4",
- "@rollup/rollup-android-arm64": "4.27.4",
- "@rollup/rollup-darwin-arm64": "4.27.4",
- "@rollup/rollup-darwin-x64": "4.27.4",
- "@rollup/rollup-freebsd-arm64": "4.27.4",
- "@rollup/rollup-freebsd-x64": "4.27.4",
- "@rollup/rollup-linux-arm-gnueabihf": "4.27.4",
- "@rollup/rollup-linux-arm-musleabihf": "4.27.4",
- "@rollup/rollup-linux-arm64-gnu": "4.27.4",
- "@rollup/rollup-linux-arm64-musl": "4.27.4",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4",
- "@rollup/rollup-linux-riscv64-gnu": "4.27.4",
- "@rollup/rollup-linux-s390x-gnu": "4.27.4",
- "@rollup/rollup-linux-x64-gnu": "4.27.4",
- "@rollup/rollup-linux-x64-musl": "4.27.4",
- "@rollup/rollup-win32-arm64-msvc": "4.27.4",
- "@rollup/rollup-win32-ia32-msvc": "4.27.4",
- "@rollup/rollup-win32-x64-msvc": "4.27.4",
+ "@rollup/rollup-android-arm-eabi": "4.34.1",
+ "@rollup/rollup-android-arm64": "4.34.1",
+ "@rollup/rollup-darwin-arm64": "4.34.1",
+ "@rollup/rollup-darwin-x64": "4.34.1",
+ "@rollup/rollup-freebsd-arm64": "4.34.1",
+ "@rollup/rollup-freebsd-x64": "4.34.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.34.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.34.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.34.1",
+ "@rollup/rollup-linux-arm64-musl": "4.34.1",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.34.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.34.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.34.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.34.1",
+ "@rollup/rollup-linux-x64-gnu": "4.34.1",
+ "@rollup/rollup-linux-x64-musl": "4.34.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.34.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.34.1",
+ "@rollup/rollup-win32-x64-msvc": "4.34.1",
"fsevents": "~2.3.2"
}
},
@@ -1200,15 +1285,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -1220,6 +1296,18 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "license": "MIT",
+ "dependencies": {
+ "through": "2"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -1234,47 +1322,28 @@
}
},
"node_modules/svelte": {
- "version": "4.2.19",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz",
- "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==",
+ "version": "5.19.6",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.6.tgz",
+ "integrity": "sha512-6ydekB3qyqUal+UhfMjmVOjRGtxysR8vuiMhi2nwuBtPJWnctVlsGspjVFB05qmR+TXI1emuqtZt81c0XiFleA==",
"license": "MIT",
"dependencies": {
- "@ampproject/remapping": "^2.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.15",
- "@jridgewell/trace-mapping": "^0.3.18",
- "@types/estree": "^1.0.1",
- "acorn": "^8.9.0",
- "aria-query": "^5.3.0",
- "axobject-query": "^4.0.0",
- "code-red": "^1.0.3",
- "css-tree": "^2.3.1",
- "estree-walker": "^3.0.3",
- "is-reference": "^3.0.1",
+ "@ampproject/remapping": "^2.3.0",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@types/estree": "^1.0.5",
+ "acorn": "^8.12.1",
+ "acorn-typescript": "^1.4.13",
+ "aria-query": "^5.3.1",
+ "axobject-query": "^4.1.0",
+ "clsx": "^2.1.1",
+ "esm-env": "^1.2.1",
+ "esrap": "^1.4.3",
+ "is-reference": "^3.0.3",
"locate-character": "^3.0.0",
- "magic-string": "^0.30.4",
- "periscopic": "^3.1.0"
+ "magic-string": "^0.30.11",
+ "zimmerframe": "^1.1.2"
},
"engines": {
- "node": ">=16"
- }
- },
- "node_modules/svelte-chartjs": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/svelte-chartjs/-/svelte-chartjs-3.1.5.tgz",
- "integrity": "sha512-ka2zh7v5FiwfAX1oMflZ0HkNkgjHjFqANgRyC+vNYXfxtx2ku68Zo+2KgbKeBH2nS1ThDqkIACPzGxy4T0UaoA==",
- "license": "MIT",
- "peerDependencies": {
- "chart.js": "^3.5.0 || ^4.0.0",
- "svelte": "^4.0.0"
- }
- },
- "node_modules/svelte/node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0"
+ "node": ">=18"
}
},
"node_modules/svelte/node_modules/is-reference": {
@@ -1287,9 +1356,9 @@
}
},
"node_modules/terser": {
- "version": "5.36.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz",
- "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==",
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz",
+ "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -1305,6 +1374,12 @@
"node": ">=10"
}
},
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "license": "MIT"
+ },
"node_modules/tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
@@ -1332,12 +1407,11 @@
"integrity": "sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==",
"license": "MIT"
},
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC"
+ "node_modules/zimmerframe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
+ "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
+ "license": "MIT"
}
}
}
diff --git a/web/frontend/package.json b/web/frontend/package.json
index 389ffe6..6a52004 100644
--- a/web/frontend/package.json
+++ b/web/frontend/package.json
@@ -7,24 +7,23 @@
"dev": "rollup -c -w"
},
"devDependencies": {
- "@rollup/plugin-commonjs": "^25.0.8",
- "@rollup/plugin-node-resolve": "^15.3.0",
+ "@rollup/plugin-commonjs": "^28.0.2",
+ "@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-terser": "^0.4.4",
"@timohausmann/quadtree-js": "^1.2.6",
- "rollup": "^4.27.4",
+ "rollup": "^4.34.1",
"rollup-plugin-css-only": "^4.5.2",
"rollup-plugin-svelte": "^7.2.2",
- "svelte": "^4.2.19"
+ "svelte": "^5.19.6"
},
"dependencies": {
- "@rollup/plugin-replace": "^5.0.7",
- "@sveltestrap/sveltestrap": "^6.2.7",
+ "@rollup/plugin-replace": "^6.0.2",
+ "@sveltestrap/sveltestrap": "^7.0.3",
"@urql/svelte": "^4.2.2",
- "chart.js": "^4.4.6",
- "date-fns": "^2.30.0",
- "graphql": "^16.9.0",
- "mathjs": "^12.4.3",
- "svelte-chartjs": "^3.1.5",
+ "chart.js": "^4.4.7",
+ "date-fns": "^4.1.0",
+ "graphql": "^16.10.0",
+ "mathjs": "^14.2.0",
"uplot": "^1.6.31",
"wonka": "^6.3.4"
}
diff --git a/web/frontend/src/Analysis.root.svelte b/web/frontend/src/Analysis.root.svelte
index 40757d3..b90a614 100644
--- a/web/frontend/src/Analysis.root.svelte
+++ b/web/frontend/src/Analysis.root.svelte
@@ -386,6 +386,7 @@
{$topQuery.error.message}
{:else}
@@ -23,14 +24,15 @@
import NavbarLinks from "./header/NavbarLinks.svelte";
import NavbarTools from "./header/NavbarTools.svelte";
- export let username;
- export let authlevel;
- export let clusters;
- export let subClusters;
- export let roles;
+ let { username, authlevel, clusters, subClusters, roles } = $props();
- let isOpen = false;
- let screenSize;
+ let isOpen = $state(false);
+ let screenSize = $state(0);
+
+ let showMax = $derived(screenSize >= 1500);
+ let showMid = $derived(screenSize < 1500 && screenSize >= 1300);
+ let showSml = $derived(screenSize < 1300 && screenSize >= 768);
+ let showBrg = $derived(screenSize < 768);
const jobsTitle = new Map();
jobsTitle.set(2, "Job Search");
@@ -123,26 +125,28 @@
+
- (isOpen = !isOpen)} />
+ (isOpen = !isOpen)} />
(isOpen = detail.isOpen)}
+ onupdate={({ detail }) => (isOpen = detail.isOpen)}
>
-
+
\ No newline at end of file
diff --git a/web/frontend/src/Status.root.svelte b/web/frontend/src/Status.root.svelte
index f34b98b..15e714e 100644
--- a/web/frontend/src/Status.root.svelte
+++ b/web/frontend/src/Status.root.svelte
@@ -478,6 +478,7 @@
{$topUserQuery.error.message}
{:else}
{$topProjectQuery.error.message}
{:else}
-
- {#if displayMessage}
- {message.msg}
-
{/if}
+
+ {#if displayMessage}
+ {message.msg}
+ {/if}
diff --git a/web/frontend/src/generic/joblist/JobInfo.svelte b/web/frontend/src/generic/joblist/JobInfo.svelte
index 8917653..a4a555c 100644
--- a/web/frontend/src/generic/joblist/JobInfo.svelte
+++ b/web/frontend/src/generic/joblist/JobInfo.svelte
@@ -91,15 +91,15 @@
{#if job.metaData?.jobName}
{#if job.metaData?.jobName.length <= 25}
- {job.metaData.jobName}
+ {job.metaData.jobName}
{:else}
-
{job.metaData.jobName}
-
+
{/if}
{/if}
{#if job.arrayJobId}
diff --git a/web/frontend/src/generic/joblist/Pagination.svelte b/web/frontend/src/generic/joblist/Pagination.svelte
index 77f6bc9..677bed8 100644
--- a/web/frontend/src/generic/joblist/Pagination.svelte
+++ b/web/frontend/src/generic/joblist/Pagination.svelte
@@ -28,13 +28,13 @@
diff --git a/web/frontend/src/generic/plots/Histogram.svelte b/web/frontend/src/generic/plots/Histogram.svelte
index fbc5a33..88eec90 100644
--- a/web/frontend/src/generic/plots/Histogram.svelte
+++ b/web/frontend/src/generic/plots/Histogram.svelte
@@ -259,7 +259,7 @@
{#if data.length > 0}
-
+
{:else}
Cannot render histogram: No data! 0}
+ >
{:else}
Cannot render plot: No series data returned for {metric}
+
From 3d6dca938654250c2d50b9783a394cb8b686eae2 Mon Sep 17 00:00:00 2001
From: Jan Eitzinger
Date: Fri, 6 Jun 2025 16:04:37 +0200
Subject: [PATCH 094/120] Add more apps for tagger
---
internal/tagger/apps/alf.txt | 1 +
internal/tagger/apps/caracal.txt | 7 +++++++
internal/tagger/apps/chroma.txt | 3 +++
internal/tagger/apps/cp2k.txt | 1 +
internal/tagger/apps/cpmd.txt | 1 +
internal/tagger/apps/flame.txt | 1 +
internal/tagger/apps/gromacs.txt | 3 +--
internal/tagger/apps/lammps.txt | 1 +
internal/tagger/apps/orca.txt | 1 +
internal/tagger/apps/python.txt | 1 +
internal/tagger/apps/qe.txt | 3 +++
internal/tagger/apps/turbomole.txt | 10 ++++++++++
internal/tagger/apps/vasp.txt | 1 -
internal/tagger/detectApp.go | 2 +-
14 files changed, 32 insertions(+), 4 deletions(-)
create mode 100644 internal/tagger/apps/alf.txt
create mode 100644 internal/tagger/apps/caracal.txt
create mode 100644 internal/tagger/apps/chroma.txt
create mode 100644 internal/tagger/apps/cp2k.txt
create mode 100644 internal/tagger/apps/cpmd.txt
create mode 100644 internal/tagger/apps/flame.txt
create mode 100644 internal/tagger/apps/lammps.txt
create mode 100644 internal/tagger/apps/orca.txt
create mode 100644 internal/tagger/apps/qe.txt
create mode 100644 internal/tagger/apps/turbomole.txt
diff --git a/internal/tagger/apps/alf.txt b/internal/tagger/apps/alf.txt
new file mode 100644
index 0000000..c455f9e
--- /dev/null
+++ b/internal/tagger/apps/alf.txt
@@ -0,0 +1 @@
+alf
diff --git a/internal/tagger/apps/caracal.txt b/internal/tagger/apps/caracal.txt
new file mode 100644
index 0000000..ed61512
--- /dev/null
+++ b/internal/tagger/apps/caracal.txt
@@ -0,0 +1,7 @@
+calc_rate
+qmdffgen
+dynamic
+evbopt
+explore
+black_box
+poly_qmdff
diff --git a/internal/tagger/apps/chroma.txt b/internal/tagger/apps/chroma.txt
new file mode 100644
index 0000000..0e5b50e
--- /dev/null
+++ b/internal/tagger/apps/chroma.txt
@@ -0,0 +1,3 @@
+chroma
+qdp
+qmp
diff --git a/internal/tagger/apps/cp2k.txt b/internal/tagger/apps/cp2k.txt
new file mode 100644
index 0000000..1e5341c
--- /dev/null
+++ b/internal/tagger/apps/cp2k.txt
@@ -0,0 +1 @@
+cp2k
diff --git a/internal/tagger/apps/cpmd.txt b/internal/tagger/apps/cpmd.txt
new file mode 100644
index 0000000..788aa78
--- /dev/null
+++ b/internal/tagger/apps/cpmd.txt
@@ -0,0 +1 @@
+cpmd
diff --git a/internal/tagger/apps/flame.txt b/internal/tagger/apps/flame.txt
new file mode 100644
index 0000000..6e13cbf
--- /dev/null
+++ b/internal/tagger/apps/flame.txt
@@ -0,0 +1 @@
+flame
diff --git a/internal/tagger/apps/gromacs.txt b/internal/tagger/apps/gromacs.txt
index c5d939b..6fe8779 100644
--- a/internal/tagger/apps/gromacs.txt
+++ b/internal/tagger/apps/gromacs.txt
@@ -1,4 +1,3 @@
-GROMACS
gromacs
-GMX
+gmx
mdrun
diff --git a/internal/tagger/apps/lammps.txt b/internal/tagger/apps/lammps.txt
new file mode 100644
index 0000000..d254f82
--- /dev/null
+++ b/internal/tagger/apps/lammps.txt
@@ -0,0 +1 @@
+lmp
diff --git a/internal/tagger/apps/orca.txt b/internal/tagger/apps/orca.txt
new file mode 100644
index 0000000..28f7a1e
--- /dev/null
+++ b/internal/tagger/apps/orca.txt
@@ -0,0 +1 @@
+orca
diff --git a/internal/tagger/apps/python.txt b/internal/tagger/apps/python.txt
index 7a5c661..29bc0f7 100644
--- a/internal/tagger/apps/python.txt
+++ b/internal/tagger/apps/python.txt
@@ -1,3 +1,4 @@
python
+pip
anaconda
conda
diff --git a/internal/tagger/apps/qe.txt b/internal/tagger/apps/qe.txt
new file mode 100644
index 0000000..a1f7106
--- /dev/null
+++ b/internal/tagger/apps/qe.txt
@@ -0,0 +1,3 @@
+pw
+neb
+ph
diff --git a/internal/tagger/apps/turbomole.txt b/internal/tagger/apps/turbomole.txt
new file mode 100644
index 0000000..7d88ab6
--- /dev/null
+++ b/internal/tagger/apps/turbomole.txt
@@ -0,0 +1,10 @@
+dscf
+grad
+ridft
+rdgrad
+ricc2
+statpt
+aoforce
+escf
+egrad
+odft
diff --git a/internal/tagger/apps/vasp.txt b/internal/tagger/apps/vasp.txt
index eec9092..bd537e4 100644
--- a/internal/tagger/apps/vasp.txt
+++ b/internal/tagger/apps/vasp.txt
@@ -1,2 +1 @@
-VASP
vasp
diff --git a/internal/tagger/detectApp.go b/internal/tagger/detectApp.go
index 9e4bf29..00f8286 100644
--- a/internal/tagger/detectApp.go
+++ b/internal/tagger/detectApp.go
@@ -111,7 +111,7 @@ func (t *AppTagger) Match(job *schema.Job) {
for _, a := range t.apps {
tag := a.tag
for _, s := range a.strings {
- if strings.Contains(jobscript, s) {
+ if strings.Contains(strings.ToLower(jobscript), s) {
if !r.HasTag(id, t.tagType, tag) {
r.AddTagOrCreateDirect(id, t.tagType, tag)
break out
From 87c93e90cd73868cfcb7f581fed9d42b8849730b Mon Sep 17 00:00:00 2001
From: Jan Eitzinger
Date: Fri, 6 Jun 2025 16:04:53 +0200
Subject: [PATCH 095/120] Implement node query
---
api/schema.graphqls | 1 -
internal/repository/node.go | 49 +++++++++++++++++++++++++++++++++++--
2 files changed, 47 insertions(+), 3 deletions(-)
diff --git a/api/schema.graphqls b/api/schema.graphqls
index a7bafde..794c630 100644
--- a/api/schema.graphqls
+++ b/api/schema.graphqls
@@ -393,7 +393,6 @@ type TimeRangeOutput {
input NodeFilter {
hostname: StringInput
cluster: StringInput
- subCluster: StringInput
nodeState: NodeState
healthState: MonitoringState
}
diff --git a/internal/repository/node.go b/internal/repository/node.go
index 29200ec..f6425cf 100644
--- a/internal/repository/node.go
+++ b/internal/repository/node.go
@@ -5,6 +5,7 @@
package repository
import (
+ "context"
"database/sql"
"encoding/json"
"fmt"
@@ -12,6 +13,7 @@ import (
"sync"
"time"
+ "github.com/ClusterCockpit/cc-backend/internal/graph/model"
"github.com/ClusterCockpit/cc-backend/pkg/archive"
"github.com/ClusterCockpit/cc-backend/pkg/log"
"github.com/ClusterCockpit/cc-backend/pkg/lrucache"
@@ -212,8 +214,51 @@ func (r *NodeRepository) DeleteNode(id int64) error {
return nil
}
-func (r *NodeRepository) QueryNodes() ([]*schema.Node, error) {
- return nil, nil
+func (r *NodeRepository) QueryNodes(
+ ctx context.Context,
+ filters []*model.NodeFilter,
+) ([]*schema.Node, error) {
+ query, qerr := SecurityCheck(ctx, sq.Select(jobColumns...).From("node"))
+ if qerr != nil {
+ return nil, qerr
+ }
+
+ for _, f := range filters {
+ if f.Hostname != nil {
+ query = buildStringCondition("node.hostname", f.Hostname, query)
+ }
+ if f.Cluster != nil {
+ query = buildStringCondition("node.cluster", f.Cluster, query)
+ }
+ if f.NodeState != nil {
+ query = query.Where("node.node_state = ?", f.NodeState)
+ }
+ if f.HealthState != nil {
+ query = query.Where("node.health_state = ?", f.HealthState)
+ }
+ }
+
+ rows, err := query.RunWith(r.stmtCache).Query()
+ if err != nil {
+ queryString, queryVars, _ := query.ToSql()
+ log.Errorf("Error while running query '%s' %v: %v", queryString, queryVars, err)
+ return nil, err
+ }
+
+ nodes := make([]*schema.Node, 0, 50)
+ for rows.Next() {
+ node := schema.Node{}
+
+ if err := rows.Scan(&node.Hostname, &node.Cluster, &node.SubCluster,
+ &node.NodeState, &node.HealthState); err != nil {
+ rows.Close()
+ log.Warn("Error while scanning rows (Nodes)")
+ return nil, err
+ }
+ nodes = append(nodes, &node)
+ }
+
+ return nodes, nil
}
func (r *NodeRepository) ListNodes(cluster string) ([]*schema.Node, error) {
From c22d869aa7de2093236701b606129dbf0454f869 Mon Sep 17 00:00:00 2001
From: Christoph Kluge
Date: Fri, 6 Jun 2025 16:17:42 +0200
Subject: [PATCH 096/120] Move form to cardbody instead of classing
---
.../src/config/support/SupportOptions.svelte | 59 +++++++++----------
1 file changed, 29 insertions(+), 30 deletions(-)
diff --git a/web/frontend/src/config/support/SupportOptions.svelte b/web/frontend/src/config/support/SupportOptions.svelte
index 7d2b0cd..88541e0 100644
--- a/web/frontend/src/config/support/SupportOptions.svelte
+++ b/web/frontend/src/config/support/SupportOptions.svelte
@@ -3,7 +3,7 @@
-->
@@ -108,7 +110,7 @@
@@ -139,6 +141,7 @@
placeholder="Filter hostname ..."
type="text"
bind:value={pendingHostnameFilter}
+ oninput={updateHostnameFilter}
/>
@@ -153,26 +156,28 @@
Metric
- {#each systemMetrics as metric}
+ {#each systemMetrics as metric (metric.name)}
{metric.name} {presetSystemUnits[metric.name] ? "("+presetSystemUnits[metric.name]+")" : ""}
+ {:else}
+
{/each}
{/if}
-
-
- {
- const diff = Date.now() - to;
- from = new Date(from.getTime() + diff);
- to = new Date(to.getTime() + diff);
- }}
- />
-
{/if}
+
+
+ {
+ const diff = Date.now() - to;
+ from = new Date(from.getTime() + diff);
+ to = new Date(to.getTime() + diff);
+ }}
+ />
+
@@ -185,20 +190,22 @@
{:else}
{#if displayNodeOverview}
-
+
{:else}
-
+
{/if}
{/if}
-
- selectedMetrics = [...newMetrics]
- }
-/>
+{#if !displayNodeOverview}
+
+ selectedMetrics = [...newMetrics]
+ }
+ />
+{/if}
diff --git a/web/frontend/src/systems.entrypoint.js b/web/frontend/src/systems.entrypoint.js
index 2976b7d..8d5fd41 100644
--- a/web/frontend/src/systems.entrypoint.js
+++ b/web/frontend/src/systems.entrypoint.js
@@ -8,8 +8,8 @@ mount(Systems, {
displayType: displayType,
cluster: infos.cluster,
subCluster: infos.subCluster,
- from: infos.from,
- to: infos.to
+ fromPreset: infos.from,
+ toPreset: infos.to
},
context: new Map([
['cc-config', clusterCockpitConfig],
diff --git a/web/frontend/src/systems/NodeList.svelte b/web/frontend/src/systems/NodeList.svelte
index c8a5e51..bcdd293 100644
--- a/web/frontend/src/systems/NodeList.svelte
+++ b/web/frontend/src/systems/NodeList.svelte
@@ -10,38 +10,28 @@
-->
@@ -192,7 +216,7 @@
scope="col"
style="padding-top: {headerPaddingTop}px"
>
- {metric} ({systemUnits[metric]})
+ {metric} ({presetSystemUnits[metric]})
{/each}
@@ -212,7 +236,7 @@
No nodes found |
{/each}
- {/if}
+ {/if}
{#if $nodesQuery.fetching || !$nodesQuery.data}
@@ -244,10 +268,11 @@
totalItems={matchedNodes}
on:update-paging={({ detail }) => {
if (detail.itemsPerPage != itemsPerPage) {
- updateConfiguration(detail.itemsPerPage.toString(), detail.page);
+ updateConfiguration(detail.itemsPerPage, detail.page);
} else {
- nodes = []
- paging = { itemsPerPage: detail.itemsPerPage, page: detail.page };
+ nodes = [];
+ itemsPerPage = detail.itemsPerPage;
+ page = detail.page;
}
}}
/>
diff --git a/web/frontend/src/systems/NodeOverview.svelte b/web/frontend/src/systems/NodeOverview.svelte
index 68ccd78..2e7ae3c 100644
--- a/web/frontend/src/systems/NodeOverview.svelte
+++ b/web/frontend/src/systems/NodeOverview.svelte
@@ -10,101 +10,99 @@
@@ -132,22 +130,25 @@
>{item.host} ({item.subCluster})
- {#if item?.disabled[selectedMetric]}
+ {#if item?.disabled}
Metric disabled for subcluster {selectedMetric}:{item.subCluster}
{:else}
-
-
+
+
+ {#key item.data[0].metric.series[0].data.length}
+
+ {/key}
{/if}
{/each}
From ad108b285f5b94391b7a59fb886e66525bad9c3d Mon Sep 17 00:00:00 2001
From: Christoph Kluge
Date: Thu, 12 Jun 2025 17:20:22 +0200
Subject: [PATCH 100/120] fix continuous scroll next page logic error
---
internal/metricdata/cc-metric-store.go | 2 +-
internal/metricdata/prometheus.go | 2 +-
web/frontend/src/systems/NodeList.svelte | 14 +++++++-------
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/internal/metricdata/cc-metric-store.go b/internal/metricdata/cc-metric-store.go
index 557e1d2..b76ed5b 100644
--- a/internal/metricdata/cc-metric-store.go
+++ b/internal/metricdata/cc-metric-store.go
@@ -850,7 +850,7 @@ func (ccms *CCMetricStore) LoadNodeListData(
if len(nodes) > page.ItemsPerPage {
start := (page.Page - 1) * page.ItemsPerPage
end := start + page.ItemsPerPage
- if end > len(nodes) {
+ if end >= len(nodes) {
end = len(nodes)
hasNextPage = false
} else {
diff --git a/internal/metricdata/prometheus.go b/internal/metricdata/prometheus.go
index fa49764..e0add3a 100644
--- a/internal/metricdata/prometheus.go
+++ b/internal/metricdata/prometheus.go
@@ -539,7 +539,7 @@ func (pdb *PrometheusDataRepository) LoadNodeListData(
if len(nodes) > page.ItemsPerPage {
start := (page.Page - 1) * page.ItemsPerPage
end := start + page.ItemsPerPage
- if end > len(nodes) {
+ if end >= len(nodes) {
end = len(nodes)
hasNextPage = false
} else {
diff --git a/web/frontend/src/systems/NodeList.svelte b/web/frontend/src/systems/NodeList.svelte
index bcdd293..16d7755 100644
--- a/web/frontend/src/systems/NodeList.svelte
+++ b/web/frontend/src/systems/NodeList.svelte
@@ -86,11 +86,10 @@
let page = $state(1);
let itemsPerPage = $state(usePaging ? (ccconfig?.plot_list_nodesPerPage || 10) : 10);
let headerPaddingTop = $state(0);
+ let matchedNodes = $state(0);
/* Derived */
const paging = $derived({ itemsPerPage, page });
- const matchedNodes = $derived($nodesQuery?.data?.nodeMetricsList?.totalNodes || 0);
-
const nodesQuery = $derived(queryStore({
client: client,
query: nodeListQuery,
@@ -119,7 +118,7 @@
} = document.documentElement;
// Add 100 px offset to trigger load earlier
- if (scrollTop + clientHeight >= scrollHeight - 100 && $nodesQuery?.data != null && $nodesQuery.data?.nodeMetricsList.hasNextPage) {
+ if (scrollTop + clientHeight >= scrollHeight - 100 && $nodesQuery?.data?.nodeMetricsList?.hasNextPage) {
page += 1
};
});
@@ -127,7 +126,7 @@
});
$effect(() => {
- handleNodes($nodesQuery?.data?.nodeMetricsList?.items);
+ handleNodes($nodesQuery?.data?.nodeMetricsList);
});
$effect(() => {
@@ -145,14 +144,15 @@
/* Functions */
function handleNodes(data) {
if (data) {
+ matchedNodes = data.totalNodes;
if (usePaging || nodes.length == 0) {
- nodes = [...data].sort((a, b) => a.host.localeCompare(b.host));
+ nodes = [...data.items].sort((a, b) => a.host.localeCompare(b.host));
} else {
// Workaround to ignore secondary store triggers (reason tbd)
const oldNodes = $state.snapshot(nodes)
- const newNodes = [...data].map((d) => d.host)
+ const newNodes = [...data.items].map((d) => d.host)
if (!oldNodes.some((n) => newNodes.includes(n.host))) {
- nodes = nodes.concat([...data].sort((a, b) => a.host.localeCompare(b.host)))
+ nodes = nodes.concat([...data.items].sort((a, b) => a.host.localeCompare(b.host)))
};
};
};
From 27ec445e545b8e353c8222c4b51070bcaea6b780 Mon Sep 17 00:00:00 2001
From: Christoph Kluge
Date: Fri, 13 Jun 2025 14:39:55 +0200
Subject: [PATCH 101/120] Small migrations and added migration note
---
web/frontend/src/generic/PlotGrid.svelte | 11 ++
.../src/generic/helper/ConcurrentJobs.svelte | 13 +-
.../src/generic/helper/JobFootprint.svelte | 143 ++++++++++--------
.../src/generic/plots/Comparogram.svelte | 2 +-
4 files changed, 97 insertions(+), 72 deletions(-)
diff --git a/web/frontend/src/generic/PlotGrid.svelte b/web/frontend/src/generic/PlotGrid.svelte
index 5152e0d..c324409 100644
--- a/web/frontend/src/generic/PlotGrid.svelte
+++ b/web/frontend/src/generic/PlotGrid.svelte
@@ -14,6 +14,17 @@
export let itemsPerRow
export let items
+
+ /* Migtation Notes
+ * Requirements
+ * - Parent Components must be already Migrated
+ * - TODO: Job.root.svelte, Node.root.svelte
+ *
+ * How-To
+ * - Define "Plot-Slotcode" as SV5 Snippet with argument "item" in parent (!)
+ * - Pass new snippet as argument/prop to here
+ * - @render snippet in items-loop with argument == item
+ */
diff --git a/web/frontend/src/generic/helper/ConcurrentJobs.svelte b/web/frontend/src/generic/helper/ConcurrentJobs.svelte
index 85bac83..d42ace1 100644
--- a/web/frontend/src/generic/helper/ConcurrentJobs.svelte
+++ b/web/frontend/src/generic/helper/ConcurrentJobs.svelte
@@ -17,11 +17,14 @@
Icon
} from "@sveltestrap/sveltestrap";
- export let cJobs;
- export let showLinks = false;
- export let renderCard = false;
- export let width = "auto";
- export let height = "400px";
+ /* Svelte 5 Props */
+ let {
+ cJobs,
+ showLinks = false,
+ renderCard = false,
+ width = "auto",
+ height = "400px",
+ } = $props();
{#if renderCard}
diff --git a/web/frontend/src/generic/helper/JobFootprint.svelte b/web/frontend/src/generic/helper/JobFootprint.svelte
index 80e905b..8d89731 100644
--- a/web/frontend/src/generic/helper/JobFootprint.svelte
+++ b/web/frontend/src/generic/helper/JobFootprint.svelte
@@ -23,79 +23,90 @@
} from "@sveltestrap/sveltestrap";
import { findJobFootprintThresholds } from "../utils.js";
- export let job;
- export let displayTitle = true;
- export let width = "auto";
- export let height = "310px";
+ /* Svelte 5 Props */
+ let {
+ job,
+ displayTitle = true,
+ width = "auto",
+ height = "310px",
+ } = $props();
- const footprintData = job?.footprint?.map((jf) => {
- const fmc = getContext("getMetricConfig")(job.cluster, job.subCluster, jf.name);
- if (fmc) {
- // Unit
- const unit = (fmc?.unit?.prefix ? fmc.unit.prefix : "") + (fmc?.unit?.base ? fmc.unit.base : "")
+ /* Derived */
+ const footprintData = $derived(buildFootprint(job?.footprint));
+
+ /* Functions */
+ function buildFootprint(input) {
+ let result = input?.map((jf) => {
+ const fmc = getContext("getMetricConfig")(job.cluster, job.subCluster, jf.name);
+ if (fmc) {
+ // Unit
+ const unit = (fmc?.unit?.prefix ? fmc.unit.prefix : "") + (fmc?.unit?.base ? fmc.unit.base : "")
- // Threshold / -Differences
- const fmt = findJobFootprintThresholds(job, jf.stat, fmc);
+ // Threshold / -Differences
+ const fmt = findJobFootprintThresholds(job, jf.stat, fmc);
- // Define basic data -> Value: Use as Provided
- const fmBase = {
- name: jf.name + ' (' + jf.stat + ')',
- avg: jf.value,
- unit: unit,
- max: fmt.peak,
- dir: fmc.lowerIsBetter
- };
-
- if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "alert")) {
- return {
- ...fmBase,
- color: "danger",
- message: `Footprint value way ${fmc.lowerIsBetter ? "above" : "below"} expected normal threshold.`,
- impact: 3
+ // Define basic data -> Value: Use as Provided
+ const fmBase = {
+ name: jf.name + ' (' + jf.stat + ')',
+ avg: jf.value,
+ unit: unit,
+ max: fmt.peak,
+ dir: fmc.lowerIsBetter
};
- } else if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "caution")) {
+
+ if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "alert")) {
+ return {
+ ...fmBase,
+ color: "danger",
+ message: `Footprint value way ${fmc.lowerIsBetter ? "above" : "below"} expected normal threshold.`,
+ impact: 3
+ };
+ } else if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "caution")) {
+ return {
+ ...fmBase,
+ color: "warning",
+ message: `Footprint value ${fmc.lowerIsBetter ? "above" : "below"} expected normal threshold.`,
+ impact: 2,
+ };
+ } else if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "normal")) {
+ return {
+ ...fmBase,
+ color: "success",
+ message: "Footprint value within expected thresholds.",
+ impact: 1,
+ };
+ } else if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "peak")) {
+ return {
+ ...fmBase,
+ color: "info",
+ message:
+ "Footprint value above expected normal threshold: Check for artifacts recommended.",
+ impact: 0,
+ };
+ } else {
+ return {
+ ...fmBase,
+ color: "secondary",
+ message:
+ "Footprint value above expected peak threshold: Check for artifacts!",
+ impact: -1,
+ };
+ }
+ } else { // No matching metric config: display as single value
return {
- ...fmBase,
- color: "warning",
- message: `Footprint value ${fmc.lowerIsBetter ? "above" : "below"} expected normal threshold.`,
- impact: 2,
- };
- } else if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "normal")) {
- return {
- ...fmBase,
- color: "success",
- message: "Footprint value within expected thresholds.",
- impact: 1,
- };
- } else if (evalFootprint(jf.value, fmt, fmc.lowerIsBetter, "peak")) {
- return {
- ...fmBase,
- color: "info",
+ name: jf.name + ' (' + jf.stat + ')',
+ avg: jf.value,
message:
- "Footprint value above expected normal threshold: Check for artifacts recommended.",
- impact: 0,
- };
- } else {
- return {
- ...fmBase,
- color: "secondary",
- message:
- "Footprint value above expected peak threshold: Check for artifacts!",
- impact: -1,
+ `No config for metric ${jf.name} found.`,
+ impact: 4,
};
}
- } else { // No matching metric config: display as single value
- return {
- name: jf.name + ' (' + jf.stat + ')',
- avg: jf.value,
- message:
- `No config for metric ${jf.name} found.`,
- impact: 4,
- };
- }
- }).sort(function (a, b) { // Sort by impact value primarily, within impact sort name alphabetically
- return a.impact - b.impact || ((a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0));
- });;
+ }).sort(function (a, b) { // Sort by impact value primarily, within impact sort name alphabetically
+ return a.impact - b.impact || ((a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0));
+ });;
+
+ return result;
+ };
function evalFootprint(value, thresholds, lowerIsBetter, level) {
// Handle Metrics in which less value is better
@@ -176,7 +187,7 @@
>{fpd.message}
- |