@networkpro/web 1.18.3 → 1.18.5

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.
@@ -49,7 +49,7 @@ jobs:
49
49
  - name: Upgrade npm
50
50
  run: |
51
51
  corepack enable
52
- npm install -g npm@11.6.0
52
+ npm install -g npm@11.6.1
53
53
 
54
54
  - name: Install Node.js dependencies
55
55
  run: npm ci
@@ -135,7 +135,7 @@ jobs:
135
135
  - name: Upgrade npm
136
136
  run: |
137
137
  corepack enable
138
- npm install -g npm@11.6.0
138
+ npm install -g npm@11.6.1
139
139
 
140
140
  - name: Install Node.js dependencies
141
141
  run: npm ci
@@ -196,7 +196,7 @@ jobs:
196
196
  - name: Upgrade npm
197
197
  run: |
198
198
  corepack enable
199
- npm install -g npm@11.6.0
199
+ npm install -g npm@11.6.1
200
200
 
201
201
  - name: Install Node.js dependencies
202
202
  run: npm ci
@@ -51,7 +51,7 @@ jobs:
51
51
  - name: Upgrade npm
52
52
  run: |
53
53
  corepack enable
54
- npm install -g npm@11.6.0
54
+ npm install -g npm@11.6.1
55
55
 
56
56
  - name: Clean previous Lighthouse reports
57
57
  run: |
@@ -41,7 +41,7 @@ jobs:
41
41
  - name: Upgrade npm
42
42
  run: |
43
43
  corepack enable
44
- npm install -g npm@11.6.0
44
+ npm install -g npm@11.6.1
45
45
 
46
46
  - name: Install Node.js dependencies
47
47
  run: npm ci
@@ -47,7 +47,7 @@ jobs:
47
47
  - name: Upgrade npm
48
48
  run: |
49
49
  corepack enable
50
- npm install -g npm@11.6.0
50
+ npm install -g npm@11.6.1
51
51
 
52
52
  - name: Install Node.js dependencies
53
53
  run: npm ci
@@ -133,7 +133,7 @@ jobs:
133
133
  - name: Upgrade npm
134
134
  run: |
135
135
  corepack enable
136
- npm install -g npm@11.6.0
136
+ npm install -g npm@11.6.1
137
137
 
138
138
  - name: Install Node.js dependencies
139
139
  run: npm ci
@@ -194,7 +194,7 @@ jobs:
194
194
  - name: Upgrade npm
195
195
  run: |
196
196
  corepack enable
197
- npm install -g npm@11.6.0
197
+ npm install -g npm@11.6.1
198
198
 
199
199
  - name: Install Node.js dependencies
200
200
  run: npm ci
@@ -57,7 +57,7 @@ jobs:
57
57
  - name: Upgrade npm
58
58
  run: |
59
59
  corepack enable
60
- npm install -g npm@11.6.0
60
+ npm install -g npm@11.6.1
61
61
 
62
62
  - name: Install Node.js dependencies
63
63
  run: npm ci
@@ -143,7 +143,7 @@ jobs:
143
143
  - name: Upgrade npm
144
144
  run: |
145
145
  corepack enable
146
- npm install -g npm@11.6.0
146
+ npm install -g npm@11.6.1
147
147
 
148
148
  - name: Install Node.js dependencies
149
149
  run: npm ci
@@ -204,7 +204,7 @@ jobs:
204
204
  - name: Upgrade npm
205
205
  run: |
206
206
  corepack enable
207
- npm install -g npm@11.6.0
207
+ npm install -g npm@11.6.1
208
208
 
209
209
  - name: Install Node.js dependencies
210
210
  run: npm ci
package/CHANGELOG.md CHANGED
@@ -22,6 +22,70 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
22
22
 
23
23
  ---
24
24
 
25
+ ## [1.18.5] - 2025-10-05
26
+
27
+ ### Added
28
+
29
+ - Added Vercel CLI scripts to `package.json`, including `dev:vercel` and `build:vercel`.
30
+
31
+ ### Changed
32
+
33
+ - Bumped project version to `v1.18.5`.
34
+ - Updated generator metadata in `app.html` to reflect `SvelteKit 2.44.0`.
35
+ - Added `scripts/testRedirects.js` to `.gitignore`.
36
+ - Cleaned up header in `jsconfig.template.jsonc`.
37
+ - Updated **Repository Structure** section in `README.md`.
38
+ - Restructured `CHANGELOG.md` such that sections are presented in alphabetical order.
39
+ - Corrected JSDoc annotations in `static/disableSw.js`.
40
+ - Updated dependencies:
41
+ - `@sveltejs/kit` `2.43.8` → `2.44.0`
42
+ - `eslint-plugin-jsdoc` `^60.8.0` → `^60.8.1`
43
+
44
+ ### Documentation
45
+
46
+ - Revised **Repository Structure** to accurately reflect the folders under `/tests`.
47
+
48
+ ### Removed
49
+
50
+ - Removed all references to Netlify and all Netlify-specific scripts from `package.json`.
51
+ - Removed `test:redirects` script from `package.json`.
52
+ - The `testRedirects.js` script has been removed from version control, as it is no longer needed to test Netlify redirects.
53
+
54
+ ---
55
+
56
+ ## [1.18.4] - 2025-10-04
57
+
58
+ ### Changes
59
+
60
+ - Bumped project version to `v1.18.4`.
61
+ - Updated **npm** to `v11.6.1` in CI workflows:
62
+ - `.github/workflows/build-and-publish.yml`
63
+ - `.github/workflows/lighthouse.yml`
64
+ - `.github/workflows/playwright.yml`
65
+ - `.github/workflows/publish-test.yml`
66
+ - `.github/workflows/templates/publish.template.yml`
67
+ - Updated **Repository Structure** section in `README.md`.
68
+ - Updated dependencies:
69
+ - `@eslint/js` `^9.36.0` → `^9.37.0`
70
+ - `@sveltejs/adapter-vercel` `^5.10.2` → `^5.10.3`
71
+ - `@sveltejs/kit` `2.43.5` → `2.43.8`
72
+ - `@testing-library/jest-dom` `^6.8.0` → `^6.9.1`
73
+ - `browserslist` `^4.26.2` → `^4.26.3`
74
+ - `eslint` `^9.36.0` → `^9.37.0`
75
+ - `eslint-plugin-jsdoc` `^60.4.1` → `^60.8.0`
76
+ - `lightningcss` `^1.30.1` → `^1.30.2`
77
+ - `posthog-js` `^1.268.6` → `^1.270.1`
78
+ - `stylelint` `^16.24.0` → `^16.25.0`
79
+ - `svelte` `5.39.6` → `5.39.8`
80
+ - `typescript` `^5.9.2` → `^5.9.3`
81
+ - `vite` `^7.1.7` → `^7.1.9`
82
+
83
+ ### Documentation
84
+
85
+ - Updated **Repository Structure** to reflect current environment and files.
86
+
87
+ ---
88
+
25
89
  ## [1.18.3] - 2025-09-27
26
90
 
27
91
  ### Changed
@@ -131,31 +195,20 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
131
195
 
132
196
  ## [1.17.1] - 2025-09-17
133
197
 
198
+ ### Changed
199
+
200
+ - Bumped version to `v1.17.1`.
201
+
134
202
  ### Security
135
203
 
136
204
  - Patched transitive vulnerabilities by pinning dependencies via `overrides`:
137
205
  - Forced `tmp` to `>=0.2.4` (resolves CVE-2025-54798 reported via `@lhci/cli`).
138
206
  - Forced `cookie` to `^1.0.0` (used by `@sveltejs/kit` and `@lhci/cli`).
139
207
 
140
- ### Changed
141
-
142
- - Bumped version to `v1.17.1`.
143
-
144
208
  ---
145
209
 
146
210
  ## [1.17.0] - 2025-09-17
147
211
 
148
- ### Security
149
-
150
- - Updated dependencies to address known vulnerabilities (notably `@sveltejs/kit`, `vite`, and related plugins).
151
-
152
- ### Documentation
153
-
154
- - Clarified CSP reporting setup in `README.md`:
155
- - Explained relationship with external CSP reporting endpoint (`csp-endpoint` repo).
156
- - Documented use of both `report-uri` (legacy) and `report-to` (modern, recommended).
157
- - Added example headers including `Report-To` definition.
158
-
159
212
  ### Added
160
213
 
161
214
  - New `meta-check.yml` GitHub Actions workflow to validate `<title>` and `<meta>` descriptions using Vitest.
@@ -203,11 +256,22 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
203
256
  - `svelte-eslint-parser` `^1.3.0` → `^1.3.2`
204
257
  - `vite` `^7.0.6` → `^7.1.5`
205
258
 
259
+ ### Documentation
260
+
261
+ - Clarified CSP reporting setup in `README.md`:
262
+ - Explained relationship with external CSP reporting endpoint (`csp-endpoint` repo).
263
+ - Documented use of both `report-uri` (legacy) and `report-to` (modern, recommended).
264
+ - Added example headers including `Report-To` definition.
265
+
206
266
  ### Removed
207
267
 
208
268
  - Deleted `src/routes/example.svx`, which was unused and unneeded.
209
269
  - Removed `mdsvex` from package.json, as it is unlikely to be used.
210
270
 
271
+ ### Security
272
+
273
+ - Updated dependencies to address known vulnerabilities (notably `@sveltejs/kit`, `vite`, and related plugins).
274
+
211
275
  ### Notes
212
276
 
213
277
  - Pinned `jsdom` to `26.1.0` due to build incompatibility in `27.x` (`cssstyle` parsing error with Vite/Rollup).
@@ -469,6 +533,11 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
469
533
 
470
534
  ## [1.14.1] - 2025-06-16
471
535
 
536
+ ### Added
537
+
538
+ - Introduced `.github/workflows/publish-test.yml`, a standalone workflow to safely simulate `npm publish` without publishing.
539
+ - Added commands to display Node.js and npm versions for visibility and troubleshooting in all relevant jobs.
540
+
472
541
  ### Changed
473
542
 
474
543
  - Updated Node.js engine to `24` to match the specified engine constraints in `package.json`.
@@ -476,11 +545,6 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
476
545
  - Refactored `build-and-publish.yml` to use `git archive` for artifact preparation and aligned it with a tested publishing flow.
477
546
  - Removed `.npmrc` token-based authentication in favor of environment secrets to avoid credential conflicts.
478
547
 
479
- ### Added
480
-
481
- - Introduced `.github/workflows/publish-test.yml`, a standalone workflow to safely simulate `npm publish` without publishing.
482
- - Added commands to display Node.js and npm versions for visibility and troubleshooting in all relevant jobs.
483
-
484
548
  ---
485
549
 
486
550
  ## [1.14.0] - 2025-06-16
@@ -809,13 +873,7 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
809
873
  - Upgraded `posthog-js` from `v1.249.4` to `v1.249.5`.
810
874
  - Upgraded `vitest` from `v3.2.2` to `v3.2.3`.
811
875
 
812
- ### Fixed
813
-
814
- - 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.
815
- - Scoped Lighthouse assertions in `.lighthouserc.cjs` to `resource-summary` only, preventing unwanted failures from default performance audits.
816
- - Resolved malformed PR comment formatting in the Lighthouse GitHub Actions workflow by replacing Markdown tables with plain-text bullet lists.
817
-
818
- ### Docs
876
+ ### Documentation
819
877
 
820
878
  - Updated `README.md` with improved context and phrasing around the CHANGELOG reference.
821
879
  - Added `CHANGELOG.md` to the documented project structure with a descriptive label:
@@ -824,7 +882,13 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
824
882
  ├── CHANGELOG.md # Chronological record of notable project changes
825
883
  ```
826
884
 
827
- ### Misc
885
+ ### Fixed
886
+
887
+ - 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.
888
+ - Scoped Lighthouse assertions in `.lighthouserc.cjs` to `resource-summary` only, preventing unwanted failures from default performance audits.
889
+ - Resolved malformed PR comment formatting in the Lighthouse GitHub Actions workflow by replacing Markdown tables with plain-text bullet lists.
890
+
891
+ ### Notes
828
892
 
829
893
  - 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.
830
894
  - Verified that `scripts/openReport.js` does not require unit testing, as it performs side-effect-only CLI actions. Linting and manual testing are sufficient.
@@ -944,7 +1008,9 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
944
1008
 
945
1009
  <!-- Link references -->
946
1010
 
947
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.18.3...HEAD
1011
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.18.5...HEAD
1012
+ [1.18.5]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.5
1013
+ [1.18.4]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.4
948
1014
  [1.18.3]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.3
949
1015
  [1.18.2]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.2
950
1016
  [1.18.1]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.18.1
package/README.md CHANGED
@@ -90,14 +90,14 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
90
90
  │ └── sitemap.xml # SEO: full site map
91
91
  ├── tests/
92
92
  │ ├── e2e/ # Playwright end-to-end tests
93
+ │ ├── meta/ # Metadata end-to-end CI tests
93
94
  │ └── unit/ # Vitest unit tests
94
95
  │ ├── client/ # Client-side (jsdom) unit tests
95
96
  │ ├── server/ # Server-side (node) unit tests
96
97
  │ │ └── internal/ # Internal audit/test helpers
97
98
  │ │ └── auditCoverage.test.js # Warns about untested source modules
98
- ├── _redirects # Netlify redirect rules
99
99
  ├── CHANGELOG.md # Chronological record of notable project changes
100
- ├── netlify.toml # Netlify configuration
100
+ ├── vercel.json # Vercel configuration
101
101
  ├── package.json # Project manifest (scripts, deps, etc.)
102
102
  └── ...
103
103
  ```
@@ -1,9 +1,9 @@
1
1
  /* =========================================================================
2
2
  jsconfig.template.jsonc
3
3
 
4
- NOTE: This file is for reference only and is not actively used by SvelteKit or
5
- tooling. SvelteKit uses the jsconfig.json file without comments for actual
6
- configuration.
4
+ NOTE: This file is for reference only and is not actively used by SvelteKit
5
+ or tooling. SvelteKit uses the jsconfig.json file without comments for
6
+ actual configuration.
7
7
 
8
8
  Copyright © 2025 Network Pro Strategies (Network Pro™)
9
9
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.18.3",
4
+ "version": "1.18.5",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advisory",
@@ -36,10 +36,10 @@
36
36
  "scripts": {
37
37
  "dev": "vite dev",
38
38
  "start": "npm run dev",
39
- "dev:netlify": "netlify dev",
39
+ "dev:vercel": "vercel dev",
40
40
  "build": "vite build",
41
+ "build:vercel": "vercel build",
41
42
  "preview": "vite preview",
42
- "build:netlify": "netlify build",
43
43
  "css:bundle": "node scripts/bundleCss.js",
44
44
  "prepare": "svelte-kit sync || echo ''",
45
45
  "check": "svelte-kit sync && svelte-check --tsconfig ./jsconfig.json",
@@ -60,7 +60,6 @@
60
60
  "test:watch": "vitest --config vitest.config.client.js --watch",
61
61
  "test:coverage": "npm run test:client -- --run --coverage && npm run test:server -- --run --coverage",
62
62
  "test:e2e": "npx playwright test --retries=1",
63
- "test:redirects": "node scripts/testRedirects.js",
64
63
  "coverage:client": "node scripts/openReport.js client",
65
64
  "coverage:server": "node scripts/openReport.js server",
66
65
  "coverage:open": "npm run coverage:client && npm run coverage:server",
@@ -68,7 +67,7 @@
68
67
  "lint:fix": "eslint . --ext .mjs,.js,.svelte --fix",
69
68
  "lint:jsdoc": "eslint . --ext .js,.mjs,.svelte --max-warnings=0",
70
69
  "lint:css": "stylelint \"**/*.{css,svelte}\" --ignore-path .stylelintignore",
71
- "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#build/**\" \"#.netlify/**\" \"#playwright-report/**\" \"#test-results/**\"",
70
+ "lint:md": "npx markdownlint-cli2 \"**/*.{md,markdown}\" \"#node_modules/**\" \"#build/**\" \"#playwright-report/**\" \"#test-results/**\"",
72
71
  "lint:all": "npm run lint && npm run lint:md && npm run lint:css && npm run format",
73
72
  "format": "prettier --check .",
74
73
  "format:fix": "prettier --write .",
@@ -79,45 +78,45 @@
79
78
  },
80
79
  "dependencies": {
81
80
  "dompurify": "^3.2.7",
82
- "posthog-js": "^1.268.6",
81
+ "posthog-js": "^1.270.1",
83
82
  "semver": "^7.7.2",
84
- "svelte": "5.39.6"
83
+ "svelte": "5.39.8"
85
84
  },
86
85
  "devDependencies": {
87
86
  "@eslint/compat": "^1.4.0",
88
- "@eslint/js": "^9.36.0",
87
+ "@eslint/js": "^9.37.0",
89
88
  "@lhci/cli": "^0.15.1",
90
89
  "@playwright/test": "^1.55.1",
91
- "@sveltejs/adapter-vercel": "^5.10.2",
92
- "@sveltejs/kit": "2.43.5",
90
+ "@sveltejs/adapter-vercel": "^5.10.3",
91
+ "@sveltejs/kit": "2.44.0",
93
92
  "@sveltejs/vite-plugin-svelte": "^6.2.1",
94
- "@testing-library/jest-dom": "^6.8.0",
93
+ "@testing-library/jest-dom": "^6.9.1",
95
94
  "@testing-library/svelte": "^5.2.8",
96
95
  "@vitest/coverage-v8": "^3.2.4",
97
96
  "autoprefixer": "^10.4.21",
98
- "browserslist": "^4.26.2",
99
- "eslint": "^9.36.0",
97
+ "browserslist": "^4.26.3",
98
+ "eslint": "^9.37.0",
100
99
  "eslint-config-prettier": "^10.1.8",
101
- "eslint-plugin-jsdoc": "^60.4.1",
100
+ "eslint-plugin-jsdoc": "^60.8.1",
102
101
  "eslint-plugin-svelte": "^3.12.4",
103
102
  "globals": "^16.4.0",
104
103
  "jsdom": "26.1.0",
105
- "lightningcss": "^1.30.1",
104
+ "lightningcss": "^1.30.2",
106
105
  "markdownlint": "^0.38.0",
107
106
  "markdownlint-cli2": "^0.18.1",
108
107
  "playwright": "^1.55.1",
109
108
  "postcss": "^8.5.6",
110
109
  "prettier": "^3.6.2",
111
110
  "prettier-plugin-svelte": "^3.4.0",
112
- "stylelint": "^16.24.0",
111
+ "stylelint": "^16.25.0",
113
112
  "stylelint-config-html": "^1.1.0",
114
113
  "stylelint-config-recommended": "^17.0.0",
115
114
  "stylelint-order": "^7.0.0",
116
115
  "svelte-check": "^4.3.2",
117
116
  "svelte-eslint-parser": "^1.3.3",
118
117
  "svelte-preprocess": "^6.0.3",
119
- "typescript": "^5.9.2",
120
- "vite": "^7.1.7",
118
+ "typescript": "^5.9.3",
119
+ "vite": "^7.1.9",
121
120
  "vite-plugin-lightningcss": "^0.0.5",
122
121
  "vite-tsconfig-paths": "^5.1.4",
123
122
  "vitest": "^3.2.4"
package/src/app.html CHANGED
@@ -63,7 +63,7 @@
63
63
  content="bx4ham0zkpvzztzu213bhpt76m9siq" />
64
64
  <!-- cspell:enable -->
65
65
 
66
- <meta name="generator" content="SvelteKit 2.43.5" />
66
+ <meta name="generator" content="SvelteKit 2.44.0" />
67
67
 
68
68
  <script src="/disableSw.js"></script>
69
69
 
@@ -9,9 +9,9 @@ This file is part of Network Pro.
9
9
  /**
10
10
  * @file disableSw.js
11
11
  * @description Allows for Service Worker to be disabled for debugging by appending ?nosw to the path.
12
- * @module src/lib/utils/
12
+ * @module static
13
13
  * @author SunDevil311
14
- * @updated 2025-05-29
14
+ * @updated 2025-10-05
15
15
  */
16
16
 
17
17
  if (location.search.includes('nosw')) {
@@ -1,84 +0,0 @@
1
- /* ==========================================================================
2
- scripts/testRedirects.js
3
-
4
- Copyright © 2025 Network Pro Strategies (Network Pro™)
5
- SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
- This file is part of Network Pro.
7
- ========================================================================== */
8
-
9
- /**
10
- * @file testRedirects.js
11
- * @description Tests Netlify redirects against actual endpoints to verify
12
- * trailing-slash behavior.
13
- *
14
- * @module scripts/
15
- * @author SunDevil311
16
- * @updated 2025-07-01
17
- */
18
-
19
- import https from 'https';
20
- import { URL } from 'url';
21
-
22
- /**
23
- * @typedef {object} RedirectTest
24
- * @property {string} from - The source URL to test.
25
- * @property {string} to - The expected destination URL.
26
- */
27
-
28
- /** @type {RedirectTest[]} */
29
- const urls = [
30
- { from: 'https://netwk.pro/privacy-policy', to: 'https://netwk.pro/privacy' },
31
- {
32
- from: 'https://netwk.pro/privacy-policy/',
33
- to: 'https://netwk.pro/privacy',
34
- },
35
- { from: 'https://netwk.pro/foss', to: 'https://netwk.pro/foss-spotlight' },
36
- { from: 'https://netwk.pro/foss/', to: 'https://netwk.pro/foss-spotlight' },
37
- {
38
- from: 'https://www.netwk.pro/foss',
39
- to: 'https://netwk.pro/foss-spotlight',
40
- },
41
- ];
42
-
43
- /**
44
- * Tests a single redirect by making a GET request and checking the status code and location header.
45
- * @param {RedirectTest} redirect - The redirect configuration to test.
46
- * @returns {Promise<boolean>} - Resolves to true if the redirect is correct, false otherwise.
47
- */
48
- function testRedirect({ from, to }) {
49
- return new Promise((resolve) => {
50
- const req = https.request(new URL(from), { method: 'GET' }, (res) => {
51
- const location = res.headers.location;
52
- const expectedPath = new URL(to).pathname;
53
-
54
- if (res.statusCode === 301 && location === expectedPath) {
55
- console.log(`✅ ${from} → ${location}`);
56
- resolve(true);
57
- } else {
58
- console.error(
59
- `❌ ${from} → Expected 301 to ${expectedPath}, got ${res.statusCode} to ${location}`,
60
- );
61
- resolve(false);
62
- }
63
- });
64
-
65
- req.on('error', (err) => {
66
- console.error(`❌ ${from} → Network error: ${err.message}`);
67
- resolve(false);
68
- });
69
-
70
- req.end();
71
- });
72
- }
73
-
74
- /**
75
- * Runs all redirect tests and exits the process with a status code reflecting success or failure.
76
- * @returns {Promise<void>}
77
- */
78
- const runTests = async () => {
79
- const results = await Promise.all(urls.map(testRedirect));
80
- const failed = results.filter((r) => !r).length;
81
- process.exit(failed > 0 ? 1 : 0);
82
- };
83
-
84
- runTests();