Skip to content

Commit 0292736

Browse files
authored
Merge pull request #64 from KNowledgeOnWebScale/EDC_active
Bug fixes, visual improvements, and feature additions. See v1.1.0 release notes for more details.
2 parents c71ee90 + ec047b2 commit 0292736

59 files changed

Lines changed: 46949 additions & 3331 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/main.yml

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,27 @@ jobs:
1111
runs-on: ubuntu-latest
1212
steps:
1313
- name: Checkout 🛎️
14-
uses: actions/checkout@v3
14+
uses: actions/checkout@v4
1515

1616
- name: Setup Node ✨
17-
uses: actions/setup-node@v3
17+
uses: actions/setup-node@v4
1818
with:
19-
node-version: 20.x
19+
# Pin to a known-good patch for Node's experimental unit coverage output.
20+
node-version: 22.12.0
21+
cache: npm
2022

2123
- name: Install Dependencies 🔧
22-
run:
23-
yarn install
24+
run: npm ci --include=optional
25+
26+
- name: Ensure Rollup Linux binary is present
27+
run: |
28+
node -e "require.resolve('@rollup/rollup-linux-x64-gnu')" || npm i --no-save @rollup/rollup-linux-x64-gnu@$(node -p "require('./node_modules/rollup/package.json').optionalDependencies['@rollup/rollup-linux-x64-gnu'] || require('./node_modules/rollup/package.json').version")
2429
2530
- name: Build 🔧
26-
run:
27-
yarn run build
31+
run: npm run build:highmem
2832

2933
- name: Post Build Actions 🛠️
30-
run:
31-
yarn run github-post-build
34+
run: npm run github-post-build
3235
env:
3336
NODE_ENV: production
3437

@@ -39,24 +42,27 @@ jobs:
3942
environment: github-pages
4043
steps:
4144
- name: Checkout 🛎️
42-
uses: actions/checkout@v3
45+
uses: actions/checkout@v4
4346

4447
- name: Setup Node ✨
45-
uses: actions/setup-node@v3
48+
uses: actions/setup-node@v4
4649
with:
47-
node-version: 20.x
50+
# Pin to a known-good patch for Node's experimental unit coverage output.
51+
node-version: 22.12.0
52+
cache: npm
4853

4954
- name: Install Dependencies 🔧
50-
run:
51-
yarn install
55+
run: npm ci --include=optional
56+
57+
- name: Ensure Rollup Linux binary is present
58+
run: |
59+
node -e "require.resolve('@rollup/rollup-linux-x64-gnu')" || npm i --no-save @rollup/rollup-linux-x64-gnu@$(node -p "require('./node_modules/rollup/package.json').optionalDependencies['@rollup/rollup-linux-x64-gnu'] || require('./node_modules/rollup/package.json').version")
5260
5361
- name: Build 🔧
54-
run:
55-
yarn run build
62+
run: npm run build:highmem
5663

5764
- name: Post Build Actions 🛠️
58-
run:
59-
yarn run github-post-build
65+
run: npm run github-post-build
6066
env:
6167
NODE_ENV: production
6268

.github/workflows/unit-test-compliance.yml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,16 @@ jobs:
1717
- name: Setup Node
1818
uses: actions/setup-node@v4
1919
with:
20-
node-version: 20.x
20+
# Pin to a known-good patch for Node's experimental unit coverage output.
21+
node-version: 22.12.0
22+
cache: npm
2123

2224
- name: Install dependencies
23-
run: yarn install --frozen-lockfile
25+
run: npm ci --include=optional
26+
27+
- name: Ensure Rollup Linux binary is present
28+
run: |
29+
node -e "require.resolve('@rollup/rollup-linux-x64-gnu')" || npm i --no-save @rollup/rollup-linux-x64-gnu@$(node -p "require('./node_modules/rollup/package.json').optionalDependencies['@rollup/rollup-linux-x64-gnu'] || require('./node_modules/rollup/package.json').version")
2430
2531
- name: Run unit + component compliance
26-
run: yarn test:compliance:quiet
32+
run: npm run test:compliance:quiet

.node-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
22.12.0

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include=optional

.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
22.12.0

CITATION.bib

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ @misc{solidcockpit_2026
55
version = {1.0.0},
66
publisher = {GitHub},
77
howpublished = {\\url{https://github.com/KNowledgeOnWebScale/solid-cockpit}},
8-
note = {Software. Web app: \\url{https://knowledgeonwebscale.github.io/solid-cockpit}. Accessed: 2026-03-04}
8+
note = {Software. Web app: \\url{https://knowledgeonwebscale.github.io/solid-cockpit}.}
99
}

README.md

Lines changed: 84 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
![Vite](https://img.shields.io/badge/vite-6.2.3-646cff)
99
![License](https://img.shields.io/badge/license-MIT-green)
1010

11-
Solid Cockpit is a web application for interacting with Solid Pods: authentication, data upload, query execution, and privacy management.
11+
Solid Cockpit is a Vue web application for interacting with Solid Pods: authentication, data upload, pod browsing, SPARQL query execution, query caching, and privacy/ACL management.
1212

1313
This application was developed in the context of the CHIST-ERA TRIPLE project.
1414

@@ -23,11 +23,12 @@ This application was developed in the context of the CHIST-ERA TRIPLE project.
2323

2424
Main capabilities:
2525

26-
- Solid Pod login and registration flow
27-
- File upload and pod resource operations
28-
- SPARQL querying over Solid Pods and endpoints
29-
- Query caching support
30-
- Privacy/ACL access management
26+
- Solid Pod login, session display, and pod registration/selection
27+
- File upload to typed or browsed pod container destinations
28+
- Pod browsing with filtering, metadata inspection, download, move, rename, and delete operations
29+
- SPARQL querying over Solid Pods, SPARQL endpoints, and mixed/federated sources
30+
- Query cache records with result previews, filtering, sorting, rename, sharing, and deletion
31+
- Privacy/ACL management with shared-with-me/shared-with-others records, notifications, and scheduled revocation
3132

3233
### Accessing the App
3334

@@ -45,9 +46,13 @@ If you want to run locally, see [Developers](#developers).
4546

4647
### Usage Guides
4748

48-
TRIPLE onboarding guide:
49+
In-app guides are available from the relevant page:
4950

50-
- [TRIPLE-guide.md](./TRIPLE-guide.md)
51+
- `Home`: app overview and embedded video demonstration
52+
- `Data Upload`: upload destination and file upload workflow
53+
- `Pod Browser`: container browsing and resource operations
54+
- `Data Query`: query execution, examples, query URLs, and cache workflow
55+
- `Privacy Editing`: ACL editing, notifications, sharing records, and revocation scheduling
5156

5257
Solid Pod VoID file generation:
5358

@@ -106,78 +111,98 @@ You can also use:
106111
- Pinia
107112
- Inrupt Solid client/auth libraries
108113
- Comunica SPARQL engine
114+
- YASQE/YASR query editor and result viewers
115+
- npm-managed dependency workflow
116+
117+
### Source Layout
118+
119+
- `src/components/`: Vue UI components only
120+
- `src/services/solid/`: Solid auth, pod access, upload, and ACL helper modules
121+
- `src/services/query/`: query execution, parsing, and worker code
122+
- `src/stores/`: Pinia state modules
109123

110124
### Prerequisites
111125

112-
- Node.js 20+
113-
- Yarn 1.x (repo currently uses `yarn.lock`)
126+
- Node.js 22.x (LTS recommended)
127+
- npm 10+ (repo now uses `package-lock.json`)
128+
- Do not use Yarn for this repo; npm is the supported package manager.
129+
130+
Node 24 note:
131+
- `@inrupt/solid-client@3.x` currently declares support for Node `^20 || ^22`, so this repo pins to Node 22 for strict engine compatibility.
114132

115133
### Local Setup
116134

117135
Install dependencies:
118136

119137
```bash
120-
yarn install
138+
npm install
121139
```
122140

123141
Run locally:
124142

125143
```bash
126-
yarn dev
144+
npm run dev
127145
```
128146

129147
Build production assets:
130148

131149
```bash
132-
yarn build
150+
npm run build
151+
```
152+
153+
If you hit a Node heap out-of-memory error during production builds, rerun with an increased heap size:
154+
155+
```bash
156+
NODE_OPTIONS=--max-old-space-size=8192 npm run build
133157
```
134158

135159
Preview production build:
136160

137161
```bash
138-
yarn serve
162+
npm run serve
139163
```
140164

141165
### Scripts
142166

143167
| Script | Description |
144168
| --- | --- |
145-
| `yarn dev` | Start Vite development server |
146-
| `yarn build` | Build production assets into `dist/` |
147-
| `yarn serve` | Preview the production build locally |
148-
| `yarn test:unit` | Run unit tests (Node built-in runner + TS loader) |
149-
| `yarn test:unit:watch` | Run unit tests in watch mode |
150-
| `yarn test:unit:coverage` | Run unit tests with coverage report generation |
151-
| `yarn test:unit:compliance` | Enforce unit-test + coverage thresholds |
152-
| `yarn test:unit:compliance:quiet` | Enforce unit coverage with concise output |
153-
| `yarn test:component` | Run Vue component tests (`.vue`) via Vitest |
154-
| `yarn test:component:watch` | Run Vue component tests in watch mode |
155-
| `yarn test:component:coverage` | Run Vue component tests with coverage |
156-
| `yarn test:component:compliance` | Enforce Vue component test coverage thresholds |
157-
| `yarn test:component:compliance:quiet` | Enforce component coverage with concise output |
158-
| `yarn test:compliance` | Run full (unit + component) compliance checks |
159-
| `yarn test:compliance:quiet` | Run full compliance checks with concise output |
160-
| `yarn hooks:install` | Configure local git hooks path (`.githooks`) |
161-
| `yarn github-post-build` | Create route-compatible `index.html` copies in `dist/` |
162-
| `yarn deploy` | Publish `dist/` to GitHub Pages |
169+
| `npm run dev` | Start Vite development server |
170+
| `npm run build` | Build production assets into `dist/` |
171+
| `npm run build:highmem` | Build production assets with an 8GB Node heap |
172+
| `npm run serve` | Preview the production build locally |
173+
| `npm run test:unit` | Run unit tests (Node built-in runner + TS loader) |
174+
| `npm run test:unit:watch` | Run unit tests in watch mode |
175+
| `npm run test:unit:coverage` | Run unit tests with coverage report generation |
176+
| `npm run test:unit:compliance` | Enforce unit-test + coverage thresholds |
177+
| `npm run test:unit:compliance:quiet` | Enforce unit coverage with concise output |
178+
| `npm run test:component` | Run Vue component tests (`.vue`) via Vitest |
179+
| `npm run test:component:watch` | Run Vue component tests in watch mode |
180+
| `npm run test:component:coverage` | Run Vue component tests with coverage |
181+
| `npm run test:component:compliance` | Enforce Vue component test coverage thresholds |
182+
| `npm run test:component:compliance:quiet` | Enforce component coverage with concise output |
183+
| `npm run test:compliance` | Run full (unit + component) compliance checks |
184+
| `npm run test:compliance:quiet` | Run full compliance checks with concise output |
185+
| `npm run hooks:install` | Configure local git hooks path (`.githooks`) |
186+
| `npm run github-post-build` | Create route-compatible `index.html` copies in `dist/` |
187+
| `npm run deploy` | Publish `dist/` to GitHub Pages |
163188

164189
### Testing and Coverage
165190

166191
Unit test suite:
167192

168193
- Location: `tests/unit/`
169-
- Command: `yarn test:unit`
194+
- Command: `npm run test:unit`
170195

171196
Component test suite:
172197

173198
- Location: `tests/components/`
174-
- Command: `yarn test:component`
199+
- Command: `npm run test:component`
175200
- Includes focused `ThemeSwitch` + `TheFooter` tests and full `.vue` smoke mounts in `tests/components/AllComponentsSmoke.test.ts`
176201

177202
Coverage tracker:
178203

179204
```bash
180-
yarn test:unit:coverage
205+
npm run test:unit:coverage
181206
```
182207

183208
This command:
@@ -194,16 +219,16 @@ Compliance thresholds (gating):
194219

195220
Tracked files:
196221

197-
- `src/components/fileUploadUtils.ts`
198-
- `src/components/mime_types.js`
199-
- `src/components/queryPodUtils.ts`
200-
- `src/components/z3-headers.ts`
222+
- `src/services/solid/fileUploadUtils.ts`
223+
- `src/services/solid/mime_types.js`
224+
- `src/services/query/queryPodUtils.ts`
225+
- `src/services/query/z3-headers.ts`
201226

202227
Advisory (non-gating) coverage is also reported for:
203228

204-
- `src/components/login.ts`
205-
- `src/components/getData.ts`
206-
- `src/components/privacyEdit.ts`
229+
- `src/services/solid/login.ts`
230+
- `src/services/solid/getData.ts`
231+
- `src/services/solid/privacyEdit.ts`
207232

208233
Override thresholds with env vars:
209234

@@ -222,7 +247,7 @@ Commit-time compliance check:
222247
Install hooks locally:
223248

224249
```bash
225-
yarn hooks:install
250+
npm run hooks:install
226251
```
227252

228253
If automatic hook setup is blocked in your environment:
@@ -254,14 +279,14 @@ Recommended release workflow:
254279
1. Update version:
255280

256281
```bash
257-
yarn version --new-version X.Y.Z
282+
npm version X.Y.Z
258283
```
259284

260285
2. Build and validate:
261286

262287
```bash
263-
yarn test:unit
264-
yarn build
288+
npm run test:unit
289+
npm run build:highmem
265290
```
266291

267292
3. Create and push release tags:
@@ -277,8 +302,8 @@ git push origin vX.Y.Z web-app-vX.Y.Z
277302
GitHub Pages deployment setup:
278303

279304
- `vite.config.js` uses `/solid-cockpit/` base path for production
280-
- `yarn github-post-build` prepares route folders in `dist/`
281-
- `yarn deploy` publishes `dist/` via `gh-pages`
305+
- `npm run github-post-build` prepares route folders in `dist/`
306+
- `npm run deploy` publishes `dist/` via `gh-pages`
282307

283308
### Dependency Versions
284309

@@ -288,20 +313,22 @@ Runtime dependencies:
288313

289314
| Package | Version |
290315
| --- | --- |
291-
| `@comunica/context-entries` | `^4.2.0` |
292-
| `@comunica/logger-pretty` | `^4.2.0` |
293-
| `@comunica/query-sparql` | `^4.3.0` |
294-
| `@comunica/query-sparql-solid` | `^4.0.2` |
295-
| `@inrupt/solid-client` | `2.1.2` |
296-
| `@inrupt/solid-client-authn-browser` | `3.1.0` |
297-
| `@inrupt/solid-client-authn-node` | `^3.1.0` |
316+
| `@comunica/context-entries` | `^5.2.0` |
317+
| `@comunica/logger-pretty` | `^5.2.0` |
318+
| `@comunica/query-sparql` | `^5.2.0` |
319+
| `@comunica/query-sparql-solid` | `^5.0.1` |
320+
| `@inrupt/solid-client` | `^3.0.0` |
321+
| `@inrupt/solid-client-authn-browser` | `^4.0.0` |
322+
| `@inrupt/solid-client-authn-node` | `^4.0.0` |
323+
| `@mdi/font` | `^7.4.47` |
298324
| `@triply/yasqe` | `^4.2.28` |
299325
| `@triply/yasr` | `^4.2.28` |
300326
| `@vitejs/plugin-vue` | `^5.2.3` |
301327
| `@vue/eslint-config-typescript` | `^9.1.0` |
302328
| `actor-query-process-remote-cache` | `^0.1.0` |
303329
| `core-js` | `^3.8.3` |
304330
| `fs` | `^0.0.1-security` |
331+
| `material-icons` | `^1.13.14` |
305332
| `pinia` | `^2.3.1` |
306333
| `query-sparql-remote-cache` | `^0.0.9` |
307334
| `sparqljs` | `^3.7.3` |
@@ -315,10 +342,10 @@ Development dependencies:
315342

316343
| Package | Version |
317344
| --- | --- |
318-
| `@tsconfig/node20` | `^20.1.5` |
345+
| `@tsconfig/node22` | `^22.0.2` |
319346
| `@typescript-eslint/eslint-plugin` | `^5.4.0` |
320347
| `@typescript-eslint/parser` | `^5.4.0` |
321-
| `@vitest/coverage-v8` | `2.1.9` |
348+
| `@vitest/coverage-istanbul` | `2.1.9` |
322349
| `@vue/test-utils` | `2.4.6` |
323350
| `eslint` | `^7.32.0` |
324351
| `eslint-config-prettier` | `^8.3.0` |
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Datasources: https://sparql.uniprot.org/sparql, https://sparql.rhea-db.org/sparql/
2+
PREFIX up: <http://purl.uniprot.org/core/>
3+
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
4+
5+
SELECT ?protein ?reaction ?reactionLabel
6+
WHERE {
7+
SERVICE <https://sparql.uniprot.org/sparql> {
8+
?protein a up:Protein ;
9+
up:organism <http://purl.uniprot.org/taxonomy/9606> ;
10+
up:catalyzedReaction ?reaction .
11+
}
12+
13+
SERVICE <https://sparql.rhea-db.org/sparql/> {
14+
?reaction rdfs:label ?reactionLabel .
15+
FILTER(lang(?reactionLabel) = "en")
16+
}
17+
}
18+
LIMIT 30

0 commit comments

Comments
 (0)