@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.
- package/.github/workflows/playwright.yml +1 -1
- package/CHANGELOG.md +51 -2
- package/package.json +21 -20
- package/playwright.config.js +12 -12
- package/src/app.html +1 -1
- package/src/hooks.server.js +1 -1
- package/tests/e2e/app.spec.js +1 -1
- package/tests/e2e/shared/helpers.js +17 -11
- package/tests/unit/client/lib/utils/utm.test.js +2 -12
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.
|
|
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.
|
|
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.
|
|
93
|
+
"posthog-js": "^1.367.0",
|
|
94
94
|
"semver": "^7.7.4",
|
|
95
|
-
"svelte": "5.55.
|
|
95
|
+
"svelte": "5.55.3"
|
|
96
96
|
},
|
|
97
97
|
"devDependencies": {
|
|
98
|
-
"@eslint/compat": "^2.0.
|
|
98
|
+
"@eslint/compat": "^2.0.5",
|
|
99
99
|
"@eslint/js": "10.0.1",
|
|
100
100
|
"@lhci/cli": "^0.15.1",
|
|
101
|
-
"@playwright/test": "^1.
|
|
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.
|
|
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.
|
|
108
|
+
"@vitest/coverage-v8": "4.1.4",
|
|
109
109
|
"autoprefixer": "^10.4.27",
|
|
110
|
-
"browserslist": "^4.28.
|
|
111
|
-
"eslint": "10.
|
|
110
|
+
"browserslist": "^4.28.2",
|
|
111
|
+
"eslint": "10.2.0",
|
|
112
112
|
"eslint-config-prettier": "^10.1.8",
|
|
113
|
-
"eslint-plugin-jsdoc": "^62.
|
|
114
|
-
"eslint-plugin-svelte": "^3.
|
|
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.
|
|
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.
|
|
123
|
-
"postcss": "^8.5.
|
|
124
|
-
"prettier": "3.8.
|
|
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.
|
|
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.
|
|
138
|
+
"vitest": "4.1.4"
|
|
139
139
|
},
|
|
140
140
|
"overrides": {
|
|
141
|
-
"basic-ftp": "^5.2.
|
|
142
|
-
"cookie": "^1.
|
|
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.
|
|
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",
|
package/playwright.config.js
CHANGED
|
@@ -56,12 +56,12 @@ export default defineConfig({
|
|
|
56
56
|
},
|
|
57
57
|
},
|
|
58
58
|
// FIXME: Webkit and Safari consistently failing, disabled for now
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
62
|
-
//
|
|
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
|
-
//
|
|
77
|
-
//
|
|
78
|
-
//
|
|
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
package/src/hooks.server.js
CHANGED
package/tests/e2e/app.spec.js
CHANGED
|
@@ -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).
|
|
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
|
-
|
|
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-
|
|
14
|
+
* @updated 2026-04-10
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { writable } from 'svelte/store';
|
|
18
|
-
import {
|
|
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);
|