diff --git a/.gitignore b/.gitignore
index 06e105a..0a4491d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@ devices-list.json
# Scripts
scripts/multipleBundleCss.js
+scripts/testRedirects.js.bak
# Source maps
*.map
@@ -227,3 +228,5 @@ package
/playwright-report/
/blob-report/
/playwright/.cache/
+
+.vercel
diff --git a/CHANGELOG.md b/CHANGELOG.md
index da41afd..0010648 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,11 +22,38 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
---
-## [1.18.4] - 2025-10-04
+## [1.18.5] - 2025-10-05
+
+### Added
+
+- Added Vercel CLI scripts to `package.json`, including `dev:vercel` and `build:vercel`.
+
+### Changed
+
+- Bumped project version to `v1.18.5`.
+- Updated generator metadata in `app.html` to reflect `SvelteKit 2.44.0`.
+- Added `scripts/testRedirects.js` to `.gitignore`.
+- Cleaned up header in `jsconfig.template.jsonc`.
+- Updated **Repository Structure** section in `README.md`.
+- Restructured `CHANGELOG.md` such that sections are presented in alphabetical order.
+- Corrected JSDoc annotations in `static/disableSw.js`.
+- Updated dependencies:
+ - `@sveltejs/kit` `2.43.8` → `2.44.0`
+ - `eslint-plugin-jsdoc` `^60.8.0` → `^60.8.1`
### Documentation
-- Updated **Repository Structure** to reflect current environment and files.
+- Revised **Repository Structure** to accurately reflect the folders under `/tests`.
+
+### Removed
+
+- Removed all references to Netlify and all Netlify-specific scripts from `package.json`.
+- Removed `test:redirects` script from `package.json`.
+- The `testRedirects.js` script has been removed from version control, as it is no longer needed to test Netlify redirects.
+
+---
+
+## [1.18.4] - 2025-10-04
### Changes
@@ -53,6 +80,10 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
- `typescript` `^5.9.2` → `^5.9.3`
- `vite` `^7.1.7` → `^7.1.9`
+### Documentation
+
+- Updated **Repository Structure** to reflect current environment and files.
+
---
## [1.18.3] - 2025-09-27
@@ -164,31 +195,20 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
## [1.17.1] - 2025-09-17
+### Changed
+
+- Bumped version to `v1.17.1`.
+
### Security
- Patched transitive vulnerabilities by pinning dependencies via `overrides`:
- Forced `tmp` to `>=0.2.4` (resolves CVE-2025-54798 reported via `@lhci/cli`).
- Forced `cookie` to `^1.0.0` (used by `@sveltejs/kit` and `@lhci/cli`).
-### Changed
-
-- Bumped version to `v1.17.1`.
-
---
## [1.17.0] - 2025-09-17
-### Security
-
-- Updated dependencies to address known vulnerabilities (notably `@sveltejs/kit`, `vite`, and related plugins).
-
-### Documentation
-
-- Clarified CSP reporting setup in `README.md`:
- - Explained relationship with external CSP reporting endpoint (`csp-endpoint` repo).
- - Documented use of both `report-uri` (legacy) and `report-to` (modern, recommended).
- - Added example headers including `Report-To` definition.
-
### Added
- New `meta-check.yml` GitHub Actions workflow to validate `
` and `` descriptions using Vitest.
@@ -236,11 +256,22 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
- `svelte-eslint-parser` `^1.3.0` → `^1.3.2`
- `vite` `^7.0.6` → `^7.1.5`
+### Documentation
+
+- Clarified CSP reporting setup in `README.md`:
+ - Explained relationship with external CSP reporting endpoint (`csp-endpoint` repo).
+ - Documented use of both `report-uri` (legacy) and `report-to` (modern, recommended).
+ - Added example headers including `Report-To` definition.
+
### Removed
- Deleted `src/routes/example.svx`, which was unused and unneeded.
- Removed `mdsvex` from package.json, as it is unlikely to be used.
+### Security
+
+- Updated dependencies to address known vulnerabilities (notably `@sveltejs/kit`, `vite`, and related plugins).
+
### Notes
- Pinned `jsdom` to `26.1.0` due to build incompatibility in `27.x` (`cssstyle` parsing error with Vite/Rollup).
@@ -502,6 +533,11 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
## [1.14.1] - 2025-06-16
+### Added
+
+- Introduced `.github/workflows/publish-test.yml`, a standalone workflow to safely simulate `npm publish` without publishing.
+- Added commands to display Node.js and npm versions for visibility and troubleshooting in all relevant jobs.
+
### Changed
- Updated Node.js engine to `24` to match the specified engine constraints in `package.json`.
@@ -509,11 +545,6 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
- Refactored `build-and-publish.yml` to use `git archive` for artifact preparation and aligned it with a tested publishing flow.
- Removed `.npmrc` token-based authentication in favor of environment secrets to avoid credential conflicts.
-### Added
-
-- Introduced `.github/workflows/publish-test.yml`, a standalone workflow to safely simulate `npm publish` without publishing.
-- Added commands to display Node.js and npm versions for visibility and troubleshooting in all relevant jobs.
-
---
## [1.14.0] - 2025-06-16
@@ -842,13 +873,7 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
- Upgraded `posthog-js` from `v1.249.4` to `v1.249.5`.
- Upgraded `vitest` from `v3.2.2` to `v3.2.3`.
-### Fixed
-
-- Updated Lighthouse CI annotation step to explicitly select only valid Lighthouse report files (e.g., `*.report.json`, `lhr-*.json`) and ignore `assertion-results.json`, which caused `jq` parsing errors during CI runs.
-- Scoped Lighthouse assertions in `.lighthouserc.cjs` to `resource-summary` only, preventing unwanted failures from default performance audits.
-- Resolved malformed PR comment formatting in the Lighthouse GitHub Actions workflow by replacing Markdown tables with plain-text bullet lists.
-
-### Docs
+### Documentation
- Updated `README.md` with improved context and phrasing around the CHANGELOG reference.
- Added `CHANGELOG.md` to the documented project structure with a descriptive label:
@@ -857,7 +882,13 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
├── CHANGELOG.md # Chronological record of notable project changes
```
-### Misc
+### Fixed
+
+- Updated Lighthouse CI annotation step to explicitly select only valid Lighthouse report files (e.g., `*.report.json`, `lhr-*.json`) and ignore `assertion-results.json`, which caused `jq` parsing errors during CI runs.
+- Scoped Lighthouse assertions in `.lighthouserc.cjs` to `resource-summary` only, preventing unwanted failures from default performance audits.
+- Resolved malformed PR comment formatting in the Lighthouse GitHub Actions workflow by replacing Markdown tables with plain-text bullet lists.
+
+### Notes
- Confirmed that `Authenticate GitHub CLI` is not needed in `build-and-publish.yml`, as only the `check-codeql` job uses the GitHub CLI and is already authenticated.
- Verified that `scripts/openReport.js` does not require unit testing, as it performs side-effect-only CLI actions. Linting and manual testing are sufficient.
@@ -977,7 +1008,8 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
-[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.18.4...HEAD
+[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.18.5...HEAD
+[1.18.5]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.5
[1.18.4]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.4
[1.18.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.3
[1.18.2]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.2
diff --git a/README.md b/README.md
index 4ab85f5..476a492 100644
--- a/README.md
+++ b/README.md
@@ -90,6 +90,7 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
│ └── sitemap.xml # SEO: full site map
├── tests/
│ ├── e2e/ # Playwright end-to-end tests
+ │ ├── meta/ # Metadata end-to-end CI tests
│ └── unit/ # Vitest unit tests
│ ├── client/ # Client-side (jsdom) unit tests
│ ├── server/ # Server-side (node) unit tests
diff --git a/jsconfig.template.jsonc b/jsconfig.template.jsonc
index 7ad9b98..481ba3d 100644
--- a/jsconfig.template.jsonc
+++ b/jsconfig.template.jsonc
@@ -1,9 +1,9 @@
/* =========================================================================
jsconfig.template.jsonc
-NOTE: This file is for reference only and is not actively used by SvelteKit or
-tooling. SvelteKit uses the jsconfig.json file without comments for actual
-configuration.
+NOTE: This file is for reference only and is not actively used by SvelteKit
+or tooling. SvelteKit uses the jsconfig.json file without comments for
+actual configuration.
Copyright © 2025 Network Pro Strategies (Network Pro™)
SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
diff --git a/package-lock.json b/package-lock.json
index 9163e5d..4c9a2a1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@networkpro/web",
- "version": "1.18.4",
+ "version": "1.18.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@networkpro/web",
- "version": "1.18.4",
+ "version": "1.18.5",
"hasInstallScript": true,
"license": "CC-BY-4.0 OR GPL-3.0-or-later",
"dependencies": {
@@ -21,7 +21,7 @@
"@lhci/cli": "^0.15.1",
"@playwright/test": "^1.55.1",
"@sveltejs/adapter-vercel": "^5.10.3",
- "@sveltejs/kit": "2.43.8",
+ "@sveltejs/kit": "2.44.0",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/svelte": "^5.2.8",
@@ -30,7 +30,7 @@
"browserslist": "^4.26.3",
"eslint": "^9.37.0",
"eslint-config-prettier": "^10.1.8",
- "eslint-plugin-jsdoc": "^60.8.0",
+ "eslint-plugin-jsdoc": "^60.8.1",
"eslint-plugin-svelte": "^3.12.4",
"globals": "^16.4.0",
"jsdom": "26.1.0",
@@ -396,9 +396,9 @@
}
},
"node_modules/@es-joy/jsdoccomment": {
- "version": "0.67.3",
- "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.67.3.tgz",
- "integrity": "sha512-EJJt2TyxPYP92TKxnka3XIgPC17KKhj7EME5QVa8ySOseueh3cBUcII7jYaawl5io4tEpKnZIPmFr1wK2jqYmw==",
+ "version": "0.68.1",
+ "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.68.1.tgz",
+ "integrity": "sha512-wJJXnfG2Pq7ZC8IeOupkkAVtEH6OYy1uVxRTeshXDQfSNsZneS7FUQlNf710osZ5Yz/b5ev9xChvybTT7CM63g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2064,9 +2064,9 @@
}
},
"node_modules/@sveltejs/kit": {
- "version": "2.43.8",
- "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.43.8.tgz",
- "integrity": "sha512-z21dG8W4g6XtAnK8bMpaSahtPOV6JVhghhco1+GR4H39XEgIxrjIpRoT1Js84c7TmhBzbTkVpZVVPFNNPFsXkQ==",
+ "version": "2.44.0",
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.44.0.tgz",
+ "integrity": "sha512-xU5qP7PiYmrSH70Whm/I+nf0j4xBnHyRQNkC1SEfaBOwCCkkeuL6WNxSb8q4Ib7+Z+sZ4JUTDYHfoyVm02EXVQ==",
"dev": true,
"license": "MIT",
"peer": true,
@@ -3196,9 +3196,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001747",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001747.tgz",
- "integrity": "sha512-mzFa2DGIhuc5490Nd/G31xN1pnBnYMadtkyTjefPI7wzypqgCEpeWu9bJr0OnDsyKrW75zA9ZAt7pbQFmwLsQg==",
+ "version": "1.0.30001748",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001748.tgz",
+ "integrity": "sha512-5P5UgAr0+aBmNiplks08JLw+AW/XG/SurlgZLgB1dDLfAw7EfRGxIwzPHxdSCGY/BTKDqIVyJL87cCN6s0ZR0w==",
"dev": true,
"funding": [
{
@@ -3951,9 +3951,9 @@
}
},
"node_modules/detect-libc": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz",
- "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -4433,13 +4433,13 @@
}
},
"node_modules/eslint-plugin-jsdoc": {
- "version": "60.8.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.8.0.tgz",
- "integrity": "sha512-rhN7JTbIaRHcmCdQrzDI/5750e6pIi1TKRG7VD2bzaa8K5yJqwcf8lAAKcdWiblQ+El9IEPCw5j34xOg59+I1g==",
+ "version": "60.8.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.8.1.tgz",
+ "integrity": "sha512-LDcQpH4cYzU+EEri907GSzr16U2UOBiQcm95dK8ka5SnTwIT3Y7bC0iiY/MKyOotTRXaw4MY3Ec9BgHIfDBvHQ==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
- "@es-joy/jsdoccomment": "~0.67.2",
+ "@es-joy/jsdoccomment": "~0.68.1",
"are-docs-informative": "^0.0.2",
"comment-parser": "1.4.1",
"debug": "^4.4.3",
diff --git a/package.json b/package.json
index c62f8c2..3ec5245 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@networkpro/web",
"private": false,
- "version": "1.18.4",
+ "version": "1.18.5",
"description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
"keywords": [
"advisory",
@@ -36,10 +36,10 @@
"scripts": {
"dev": "vite dev",
"start": "npm run dev",
- "dev:netlify": "netlify dev",
+ "dev:vercel": "vercel dev",
"build": "vite build",
+ "build:vercel": "vercel build",
"preview": "vite preview",
- "build:netlify": "netlify build",
"css:bundle": "node scripts/bundleCss.js",
"prepare": "svelte-kit sync || echo ''",
"check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
@@ -60,7 +60,6 @@
"test:watch": "vitest --config vitest.config.client.js --watch",
"test:coverage": "npm run test:client -- --run --coverage && npm run test:server -- --run --coverage",
"test:e2e": "npx playwright test --retries=1",
- "test:redirects": "node scripts/testRedirects.js",
"coverage:client": "node scripts/openReport.js client",
"coverage:server": "node scripts/openReport.js server",
"coverage:open": "npm run coverage:client && npm run coverage:server",
@@ -68,7 +67,7 @@
"lint:fix": "eslint . --ext .mjs,.js,.svelte --fix",
"lint:jsdoc": "eslint . --ext .js,.mjs,.svelte --max-warnings=0",
"lint:css": "stylelint \"**/*.{css,svelte}\" --ignore-path .stylelintignore",
- "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#build/**\" \"#.netlify/**\" \"#playwright-report/**\" \"#test-results/**\"",
+ "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#build/**\" \"#playwright-report/**\" \"#test-results/**\"",
"lint:all": "npm run lint && npm run lint:md && npm run lint:css && npm run format",
"format": "prettier --check .",
"format:fix": "prettier --write .",
@@ -89,7 +88,7 @@
"@lhci/cli": "^0.15.1",
"@playwright/test": "^1.55.1",
"@sveltejs/adapter-vercel": "^5.10.3",
- "@sveltejs/kit": "2.43.8",
+ "@sveltejs/kit": "2.44.0",
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/svelte": "^5.2.8",
@@ -98,7 +97,7 @@
"browserslist": "^4.26.3",
"eslint": "^9.37.0",
"eslint-config-prettier": "^10.1.8",
- "eslint-plugin-jsdoc": "^60.8.0",
+ "eslint-plugin-jsdoc": "^60.8.1",
"eslint-plugin-svelte": "^3.12.4",
"globals": "^16.4.0",
"jsdom": "26.1.0",
diff --git a/scripts/testRedirects.js b/scripts/testRedirects.js
deleted file mode 100644
index deeefa5..0000000
--- a/scripts/testRedirects.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ==========================================================================
-scripts/testRedirects.js
-
-Copyright © 2025 Network Pro Strategies (Network Pro™)
-SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
-This file is part of Network Pro.
-========================================================================== */
-
-/**
- * @file testRedirects.js
- * @description Tests Netlify redirects against actual endpoints to verify
- * trailing-slash behavior.
- *
- * @module scripts/
- * @author SunDevil311
- * @updated 2025-07-01
- */
-
-import https from 'https';
-import { URL } from 'url';
-
-/**
- * @typedef {object} RedirectTest
- * @property {string} from - The source URL to test.
- * @property {string} to - The expected destination URL.
- */
-
-/** @type {RedirectTest[]} */
-const urls = [
- { from: 'https://netwk.pro/privacy-policy', to: 'https://netwk.pro/privacy' },
- {
- from: 'https://netwk.pro/privacy-policy/',
- to: 'https://netwk.pro/privacy',
- },
- { from: 'https://netwk.pro/foss', to: 'https://netwk.pro/foss-spotlight' },
- { from: 'https://netwk.pro/foss/', to: 'https://netwk.pro/foss-spotlight' },
- {
- from: 'https://www.netwk.pro/foss',
- to: 'https://netwk.pro/foss-spotlight',
- },
-];
-
-/**
- * Tests a single redirect by making a GET request and checking the status code and location header.
- * @param {RedirectTest} redirect - The redirect configuration to test.
- * @returns {Promise} - Resolves to true if the redirect is correct, false otherwise.
- */
-function testRedirect({ from, to }) {
- return new Promise((resolve) => {
- const req = https.request(new URL(from), { method: 'GET' }, (res) => {
- const location = res.headers.location;
- const expectedPath = new URL(to).pathname;
-
- if (res.statusCode === 301 && location === expectedPath) {
- console.log(`✅ ${from} → ${location}`);
- resolve(true);
- } else {
- console.error(
- `❌ ${from} → Expected 301 to ${expectedPath}, got ${res.statusCode} to ${location}`,
- );
- resolve(false);
- }
- });
-
- req.on('error', (err) => {
- console.error(`❌ ${from} → Network error: ${err.message}`);
- resolve(false);
- });
-
- req.end();
- });
-}
-
-/**
- * Runs all redirect tests and exits the process with a status code reflecting success or failure.
- * @returns {Promise}
- */
-const runTests = async () => {
- const results = await Promise.all(urls.map(testRedirect));
- const failed = results.filter((r) => !r).length;
- process.exit(failed > 0 ? 1 : 0);
-};
-
-runTests();
diff --git a/src/app.html b/src/app.html
index 06398c5..15888db 100644
--- a/src/app.html
+++ b/src/app.html
@@ -63,7 +63,7 @@
content="bx4ham0zkpvzztzu213bhpt76m9siq" />
-
+
diff --git a/static/disableSw.js b/static/disableSw.js
index 3448f0a..281224e 100644
--- a/static/disableSw.js
+++ b/static/disableSw.js
@@ -9,9 +9,9 @@ This file is part of Network Pro.
/**
* @file disableSw.js
* @description Allows for Service Worker to be disabled for debugging by appending ?nosw to the path.
- * @module src/lib/utils/
+ * @module static
* @author SunDevil311
- * @updated 2025-05-29
+ * @updated 2025-10-05
*/
if (location.search.includes('nosw')) {