@networkpro/web 1.26.18 → 1.26.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,7 +34,7 @@ jobs:
34
34
  - name: Set up Node.js
35
35
  uses: actions/setup-node@v6
36
36
  with:
37
- node-version: 22
37
+ node-version: 24
38
38
  cache: npm
39
39
  cache-dependency-path: package-lock.json
40
40
 
package/CHANGELOG.md CHANGED
@@ -24,11 +24,58 @@ version increments reflecting both user-visible and operational impact.
24
24
 
25
25
  ---
26
26
 
27
+ ## [1.26.20] - 2026-04-10
28
+
29
+ ### Changed
30
+
31
+ - Bumped project version to `v1.26.20`.
32
+ - Updated dependencies:
33
+ - `prettier` `3.8.1` → `3.8.2`
34
+ - `svelte` `5.55.2` → `5.55.3`
35
+
36
+ ### Fixed
37
+
38
+ - Removed an unused `window` mock from the UTM unit test to better reflect the current `appendUTM` implementation.
39
+ - Stabilized SPA navigation E2E helpers by relying on Playwright click actionability instead of a separate `scrollIntoViewIfNeeded()` call, with a single retry for transient no-op clicks.
40
+ - Updated the navigation link assertion to compare the resolved `pathname` instead of the raw `href` attribute for better cross-browser consistency.
41
+
42
+ ---
43
+
44
+ ## [1.26.19] - 2026-04-09
45
+
46
+ ### Changed
47
+
48
+ - Bumped project version to `v1.25.19`.
49
+ - Modified Node.js version to `24` in `.github/workflows/playwright.yml`.
50
+ - Updated generator metadata in `src/app.html` to reflect **SvelteKit 2.57.1**.
51
+ - Updated dependencies:
52
+ - `@eslint/compat` `^2.0.3` → `^2.0.5`
53
+ - `@vitest/coverage-v8` `4.1.2` → `4.1.4`
54
+ - `browserslist` `^4.28.1` → `^4.28.2`
55
+ - `jsdom` `29.0.1` → `29.0.2`
56
+ - `postcss` `^8.5.8` → `^8.5.9`
57
+ - `svelte` `5.55.1` → `5.55.2`
58
+ - `vite` `^8.0.3` → `^8.0.8`
59
+ - `vitest` `4.1.2` → `4.1.4`
60
+ - `@playwright/test` `^1.58.2` → `^1.59.1`
61
+ - `@sveltejs/kit` `2.55.0` → `2.57.1`
62
+ - `eslint` `10.1.0` → `10.2.0`
63
+ - `eslint-plugin-jsdoc` `^62.8.1` → `^62.9.0`
64
+ - `eslint-plugin-svelte` `^3.16.0` → `^3.17.0`
65
+ - `playwright` `^1.58.2` → `^1.59.1`
66
+ - `posthog-js` `^1.364.2` → `^1.367.0`
67
+
68
+ ## Security
69
+
70
+ - Added transitive dependency override for `lodash-es` `v4.18.1` in order to mitigate CVE-2026-4800 and CVE-2026-2950.
71
+ - Updated transitive dependency override for `basic-ftp` to `v5.2.1` in order to mitigate CVE-2026-39983.
72
+
73
+ ---
74
+
27
75
  ## [1.26.18] - 2026-03-30
28
76
 
29
77
  ### Changed
30
78
 
31
- - Adjusted `engines.node` in `CHANGELOG.md` to allow only `>=24.0.0 <25`, as **Node.js** `v24` is now the current LTS release.
32
79
  - Bumped project version to `v1.26.18`.
33
80
  - Updated dependencies:
34
81
  - `svelte-check` `^4.4.5` → `^4.4.6`
@@ -2624,7 +2671,9 @@ This enables analytics filtering and CSP hardening for the audit environment.
2624
2671
 
2625
2672
  <!-- Link references -->
2626
2673
 
2627
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.26.18...HEAD
2674
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.26.20...HEAD
2675
+ [1.26.20]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.20
2676
+ [1.26.19]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.19
2628
2677
  [1.26.18]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.18
2629
2678
  [1.26.17]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.17
2630
2679
  [1.26.16]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.26.16
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.26.18",
4
+ "version": "1.26.20",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advocacy",
@@ -90,38 +90,38 @@
90
90
  },
91
91
  "dependencies": {
92
92
  "dompurify": "^3.3.3",
93
- "posthog-js": "^1.364.2",
93
+ "posthog-js": "^1.367.0",
94
94
  "semver": "^7.7.4",
95
- "svelte": "5.55.1"
95
+ "svelte": "5.55.3"
96
96
  },
97
97
  "devDependencies": {
98
- "@eslint/compat": "^2.0.3",
98
+ "@eslint/compat": "^2.0.5",
99
99
  "@eslint/js": "10.0.1",
100
100
  "@lhci/cli": "^0.15.1",
101
- "@playwright/test": "^1.58.2",
101
+ "@playwright/test": "^1.59.1",
102
102
  "@sveltejs/adapter-netlify": "^6.0.4",
103
103
  "@sveltejs/adapter-vercel": "^6.3.3",
104
- "@sveltejs/kit": "2.55.0",
104
+ "@sveltejs/kit": "2.57.1",
105
105
  "@sveltejs/vite-plugin-svelte": "^7.0.0",
106
106
  "@testing-library/jest-dom": "^6.9.1",
107
107
  "@testing-library/svelte": "^5.3.1",
108
- "@vitest/coverage-v8": "4.1.2",
108
+ "@vitest/coverage-v8": "4.1.4",
109
109
  "autoprefixer": "^10.4.27",
110
- "browserslist": "^4.28.1",
111
- "eslint": "10.1.0",
110
+ "browserslist": "^4.28.2",
111
+ "eslint": "10.2.0",
112
112
  "eslint-config-prettier": "^10.1.8",
113
- "eslint-plugin-jsdoc": "^62.8.1",
114
- "eslint-plugin-svelte": "^3.16.0",
113
+ "eslint-plugin-jsdoc": "^62.9.0",
114
+ "eslint-plugin-svelte": "^3.17.0",
115
115
  "globals": "^17.4.0",
116
116
  "globby": "^16.2.0",
117
- "jsdom": "29.0.1",
117
+ "jsdom": "29.0.2",
118
118
  "lightningcss": "^1.32.0",
119
119
  "markdownlint": "^0.40.0",
120
120
  "markdownlint-cli2": "0.22.0",
121
121
  "npm-run-all": "^4.1.5",
122
- "playwright": "^1.58.2",
123
- "postcss": "^8.5.8",
124
- "prettier": "3.8.1",
122
+ "playwright": "^1.59.1",
123
+ "postcss": "^8.5.9",
124
+ "prettier": "3.8.2",
125
125
  "prettier-plugin-svelte": "^3.5.1",
126
126
  "simple-git-hooks": "^2.13.1",
127
127
  "stylelint": "^17.6.0",
@@ -132,17 +132,18 @@
132
132
  "svelte-eslint-parser": "^1.6.0",
133
133
  "svelte-preprocess": "^6.0.3",
134
134
  "typescript": "5.9.3",
135
- "vite": "^8.0.3",
135
+ "vite": "^8.0.8",
136
136
  "vite-plugin-devtools-json": "^1.0.0",
137
137
  "vite-plugin-lightningcss": "^0.0.5",
138
- "vitest": "4.1.2"
138
+ "vitest": "4.1.4"
139
139
  },
140
140
  "overrides": {
141
- "basic-ftp": "^5.2.0",
142
- "cookie": "^1.0.0",
141
+ "basic-ftp": "^5.2.1",
142
+ "cookie": "^1.1.1",
143
143
  "glob": "^11.1.0",
144
144
  "js-yaml": "^4.1.1",
145
- "lodash": "^4.17.23",
145
+ "lodash": "^4.18.1",
146
+ "lodash-es": "^4.18.1",
146
147
  "minimatch": ">=10.2.1",
147
148
  "picomatch": ">=4.0.4",
148
149
  "qs": "^6.14.1",
@@ -56,12 +56,12 @@ export default defineConfig({
56
56
  },
57
57
  },
58
58
  // FIXME: Webkit and Safari consistently failing, disabled for now
59
- // {
60
- // name: "webkit",
61
- // use: {
62
- // ...devices["Desktop Safari"], // Use default WebKit settings
63
- // },
64
- // },
59
+ //{
60
+ // name: 'webkit',
61
+ // use: {
62
+ // ...devices['Desktop Safari'], // Use default WebKit settings
63
+ // },
64
+ //},
65
65
 
66
66
  // Mobile Browsers
67
67
  {
@@ -72,12 +72,12 @@ export default defineConfig({
72
72
  },
73
73
  },
74
74
  // FIXME: Webkit and Safari consistently failing, disabled for now
75
- // {
76
- // name: "Mobile Safari",
77
- // use: {
78
- // ...devices["iPhone 14"], // Use the iPhone 14 device profile
79
- // },
80
- // },
75
+ //{
76
+ // name: 'Mobile Safari',
77
+ // use: {
78
+ // ...devices['iPhone 14'], // Use the iPhone 14 device profile
79
+ // },
80
+ //},
81
81
  ],
82
82
 
83
83
  /* Run your local preview server before starting the tests */
package/src/app.html CHANGED
@@ -53,7 +53,7 @@
53
53
  content="bx4ham0zkpvzztzu213bhpt76m9siq" />
54
54
  <!-- cspell:enable -->
55
55
 
56
- <meta name="generator" content="SvelteKit 2.55.0" />
56
+ <meta name="generator" content="SvelteKit 2.57.1" />
57
57
 
58
58
  <!-- Temporary banner -->
59
59
  <script
@@ -142,7 +142,7 @@ export async function handle({ event, resolve }) {
142
142
  if (!isTest) {
143
143
  response.headers.set(
144
144
  'Strict-Transport-Security',
145
- 'max-age=31536000; includeSubDomains;',
145
+ 'max-age=31536000; includeSubDomains',
146
146
  );
147
147
  }
148
148
 
@@ -36,7 +36,7 @@ test.describe('Desktop Tests', () => {
36
36
 
37
37
  const aboutLink = nav.getByRole('link', { name: 'about' });
38
38
  await expect(aboutLink).toBeVisible();
39
- await expect(aboutLink).toHaveAttribute('href', '/about');
39
+ await expect(aboutLink).toHaveJSProperty('pathname', '/about');
40
40
  });
41
41
 
42
42
  // Root route should display the footer properly
@@ -101,17 +101,23 @@ export function getFooter(page) {
101
101
  */
102
102
  export async function clickAndWaitForNavigation(page, locator, options = {}) {
103
103
  const { urlPattern = /\/.*/, timeout = 60000 } = options;
104
-
105
- await locator.scrollIntoViewIfNeeded();
106
- await locator.waitFor({ state: 'visible', timeout });
107
-
108
104
  const previousURL = page.url();
105
+ let lastError;
106
+
107
+ for (let attempt = 1; attempt <= 2; attempt += 1) {
108
+ await expect(locator).toBeVisible({ timeout });
109
+ await locator.click({ timeout });
110
+
111
+ try {
112
+ // SPA-stable URL wait (polling) - does not depend on navigation lifecycle
113
+ await expect(page).toHaveURL(urlPattern, { timeout: timeout / 2 });
114
+ const newURL = page.url();
115
+ console.log(`Navigation from ${previousURL} to ${newURL}`);
116
+ return;
117
+ } catch (error) {
118
+ lastError = error;
119
+ }
120
+ }
109
121
 
110
- await locator.click();
111
-
112
- // SPA-stable URL wait (polling) — does not depend on navigation lifecycle
113
- await expect(page).toHaveURL(urlPattern, { timeout });
114
-
115
- const newURL = page.url();
116
- console.log(`✅ Navigation from ${previousURL} → ${newURL}`);
122
+ throw lastError;
117
123
  }
@@ -11,11 +11,11 @@ This file is part of Network Pro.
11
11
  * @description Unit test for UTM parameters
12
12
  * @module tests/unit/client/lib/utils
13
13
  * @author Scott Lopez
14
- * @updated 2026-01-15
14
+ * @updated 2026-04-10
15
15
  */
16
16
 
17
17
  import { writable } from 'svelte/store';
18
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
18
+ import { describe, expect, it, vi } from 'vitest';
19
19
 
20
20
  // Mock SvelteKit environment and store
21
21
  vi.mock('$app/environment', () => ({ browser: true }));
@@ -36,16 +36,6 @@ vi.mock('$app/stores', () => {
36
36
  import { appendUTM } from '$lib/utils/utm.js';
37
37
 
38
38
  describe('appendUTM', () => {
39
- const originalWindow = globalThis.window;
40
-
41
- beforeEach(() => {
42
- globalThis.window = { location: { search: '' } };
43
- });
44
-
45
- afterEach(() => {
46
- globalThis.window = originalWindow;
47
- });
48
-
49
39
  it('should return URL with utm parameters for /contact', () => {
50
40
  const url = 'https://example.com';
51
41
  const result = appendUTM(url);