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 `<meta>` 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 <!-- Link references --> -[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<boolean>} - 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<void>} - */ -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" /> <!-- cspell:enable --> - <meta name="generator" content="SvelteKit 2.43.5" /> + <meta name="generator" content="SvelteKit 2.44.0" /> <script src="/disableSw.js"></script> 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')) {