@networkpro/web 1.13.7 → 1.14.1

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.
Files changed (47) hide show
  1. package/.browserslistrc +5 -0
  2. package/.editorconfig +65 -0
  3. package/.env.template +18 -0
  4. package/.gitattributes +212 -0
  5. package/.github/COMMIT_GUIDE.md +31 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.yml +74 -0
  7. package/.github/ISSUE_TEMPLATE/config.yml +32 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.yml +35 -0
  9. package/.github/ISSUE_TEMPLATE/legal_review.yml +53 -0
  10. package/.github/workflows/auto-assign.yml +36 -0
  11. package/.github/workflows/backup-branch.yml +40 -0
  12. package/.github/workflows/build-and-publish.yml +202 -0
  13. package/.github/workflows/check-codeql.yml +40 -0
  14. package/.github/workflows/check-security-txt-expirty.yml +46 -0
  15. package/.github/workflows/dependency-review.yml +22 -0
  16. package/.github/workflows/lighthouse.yml +163 -0
  17. package/.github/workflows/playwright.yml +66 -0
  18. package/.github/workflows/publish-test.yml +215 -0
  19. package/.github/workflows/templates/check-codeql.template.yml +47 -0
  20. package/.lighthouserc.cjs +37 -0
  21. package/.markdownlint.mjs +31 -0
  22. package/.md-smart-quotes.js +31 -0
  23. package/.node-version +1 -0
  24. package/.nvmrc +1 -0
  25. package/.prettierignore +55 -0
  26. package/.prettierrc +35 -0
  27. package/.stylelintignore +43 -0
  28. package/.svelte-kit/tsconfig.json +49 -0
  29. package/.vscode/customData.json +73 -0
  30. package/.vscode/extensions.json +13 -0
  31. package/.vscode/extensions.jsonc +24 -0
  32. package/.vscode/settings.json +80 -0
  33. package/CHANGELOG.md +56 -2
  34. package/cspell.json +4 -0
  35. package/package.json +3 -3
  36. package/src/app.html +1 -1
  37. package/src/lib/components/ui/.gitkeep +0 -0
  38. package/src/lib/data/fossData.js +82 -2
  39. package/src/lib/images.js +6 -4
  40. package/src/lib/img/posts/cryptomator.png +0 -0
  41. package/src/lib/img/posts/cryptomator.webp +0 -0
  42. package/src/routes/...404/+page.svelte +26 -0
  43. package/static/.well-known/dnt-policy.txt +218 -0
  44. package/static/.well-known/gpc.json +4 -0
  45. package/static/.well-known/humans.txt +21 -0
  46. package/static/.well-known/security.txt +12 -0
  47. package/static/.well-known/security.txt.sig +7 -0
@@ -0,0 +1,215 @@
1
+ # .github/workflows/publish-test.yml
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro
6
+
7
+ name: Test Publishing to Registries
8
+
9
+ on:
10
+ workflow_dispatch:
11
+
12
+ # Allow one concurrent deployment
13
+ concurrency:
14
+ group: 'build-and-publish'
15
+ cancel-in-progress: true
16
+
17
+ permissions:
18
+ actions: read
19
+ contents: read
20
+
21
+ jobs:
22
+ check-codeql:
23
+ uses: ./.github/workflows/check-codeql.yml
24
+
25
+ build:
26
+ needs: check-codeql
27
+ runs-on: ubuntu-24.04
28
+ env:
29
+ ENV_MODE: ci
30
+
31
+ steps:
32
+ - name: Checkout repository
33
+ uses: actions/checkout@v4
34
+
35
+ - name: Set up Node.js
36
+ uses: actions/setup-node@v4
37
+ with:
38
+ node-version: 24
39
+ cache: npm
40
+ cache-dependency-path: package-lock.json
41
+
42
+ - name: Show Node.js and npm versions
43
+ run: |
44
+ echo "Node.js version: $(node -v)"
45
+ echo "npm version: $(npm -v)"
46
+
47
+ - name: Upgrade npm
48
+ run: |
49
+ corepack enable
50
+ npm install -g npm@11.4.1
51
+
52
+ - name: Install Node.js dependencies
53
+ run: npm ci
54
+
55
+ - name: Install jq
56
+ run: sudo apt-get install -y jq
57
+
58
+ - name: Run JSDoc lint check
59
+ id: jsdoc_lint
60
+ continue-on-error: true
61
+ run: |
62
+ set -e
63
+ output=$(npm run lint:jsdoc || true)
64
+ echo "$output"
65
+
66
+ count=$(echo "$output" | wc -l)
67
+ echo "jsdoc_count=$count" >> "$GITHUB_OUTPUT"
68
+
69
+ - name: ✅ Pass
70
+ if: steps.jsdoc_lint.outputs.jsdoc_count == '0'
71
+ run: echo "JSDoc lint passed successfully!"
72
+
73
+ - name: ⚠️ JSDoc violations detected (non-blocking)
74
+ if: steps.jsdoc_lint.outputs.jsdoc_count != '0'
75
+ run: echo "⚠️ JSDoc lint check failed with ${{ steps.jsdoc_lint.outputs.jsdoc_count }} violations (non-blocking)"
76
+
77
+ # Test to ensure the package is working
78
+ - name: Build Node.js project
79
+ run: npm run build
80
+
81
+ # Create Git archive of version-controlled files
82
+ - name: Create clean source archive
83
+ run: git archive --format=tar.gz --output=clean-source.tar.gz HEAD
84
+
85
+ - name: Upload source archive
86
+ uses: actions/upload-artifact@v4
87
+ with:
88
+ name: clean-source
89
+ path: clean-source.tar.gz
90
+
91
+ publish-npmjs:
92
+ needs: build
93
+ runs-on: ubuntu-24.04
94
+ env:
95
+ ENV_MODE: ci
96
+
97
+ steps:
98
+ - name: Download clean source archive
99
+ uses: actions/download-artifact@v4
100
+ with:
101
+ name: clean-source
102
+ path: ./
103
+
104
+ - name: Extract source archive
105
+ run: tar -xzf clean-source.tar.gz
106
+
107
+ - name: Remove extracted source archive
108
+ run: rm clean-source.tar.gz
109
+
110
+ - name: Set up Node.js for npmjs
111
+ uses: actions/setup-node@v4
112
+ with:
113
+ node-version: 24
114
+ registry-url: https://registry.npmjs.org/
115
+ cache: npm
116
+ cache-dependency-path: package-lock.json
117
+
118
+ - name: Show Node.js and npm versions
119
+ run: |
120
+ echo "Node.js version: $(node -v)"
121
+ echo "npm version: $(npm -v)"
122
+
123
+ - name: Upgrade npm
124
+ run: |
125
+ corepack enable
126
+ npm install -g npm@11.4.1
127
+
128
+ - name: Install Node.js dependencies
129
+ run: npm ci
130
+
131
+ - name: Set up Git user
132
+ run: |
133
+ git config --global user.email "github@sl.neteng.cc"
134
+ git config --global user.name "SunDevil311"
135
+
136
+ - name: Verify version not already published
137
+ run: |
138
+ PACKAGE_NAME=$(node -p "require('./package.json').name")
139
+ PACKAGE_VERSION=$(node -p "require('./package.json').version")
140
+ echo "Checking if $PACKAGE_NAME@$PACKAGE_VERSION is already published..."
141
+
142
+ npm view $PACKAGE_NAME@$PACKAGE_VERSION > /dev/null && {
143
+ echo "❌ Version $PACKAGE_VERSION already exists on npm. Exiting..."
144
+ exit 1
145
+ } || echo "✅ Version is new. Proceeding with publish."
146
+
147
+ - name: Simulate publish package to npmjs
148
+ run: npm publish --dry-run
149
+ env:
150
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_NETPRO }}
151
+
152
+ publish-gpr:
153
+ needs: build
154
+ runs-on: ubuntu-24.04
155
+ env:
156
+ ENV_MODE: ci
157
+
158
+ steps:
159
+ - name: Download clean source archive
160
+ uses: actions/download-artifact@v4
161
+ with:
162
+ name: clean-source
163
+ path: ./
164
+
165
+ - name: Extract source archive
166
+ run: tar -xzf clean-source.tar.gz
167
+
168
+ - name: Remove extracted source archive
169
+ run: rm clean-source.tar.gz
170
+
171
+ - name: Set up Node.js for GPR
172
+ uses: actions/setup-node@v4
173
+ with:
174
+ node-version: 24
175
+ registry-url: https://npm.pkg.github.com/
176
+ cache: npm
177
+ cache-dependency-path: package-lock.json
178
+
179
+ - name: Show Node.js and npm versions
180
+ run: |
181
+ echo "Node.js version: $(node -v)"
182
+ echo "npm version: $(npm -v)"
183
+
184
+ - name: Upgrade npm
185
+ run: |
186
+ corepack enable
187
+ npm install -g npm@11.4.1
188
+
189
+ - name: Install Node.js dependencies
190
+ run: npm ci
191
+
192
+ - name: Set up Git user
193
+ run: |
194
+ git config --global user.email "github@sl.neteng.cc"
195
+ git config --global user.name "SunDevil311"
196
+
197
+ - name: Update package name for GPR
198
+ run: |
199
+ sed -i 's/"name": ".*"/"name": "@netwk-pro\/web"/' package.json
200
+
201
+ - name: Verify version not already published
202
+ run: |
203
+ PACKAGE_NAME=$(node -p "require('./package.json').name")
204
+ PACKAGE_VERSION=$(node -p "require('./package.json').version")
205
+ echo "Checking if $PACKAGE_NAME@$PACKAGE_VERSION is already published..."
206
+
207
+ npm view $PACKAGE_NAME@$PACKAGE_VERSION > /dev/null && {
208
+ echo "❌ Version $PACKAGE_VERSION already exists on npm. Exiting..."
209
+ exit 1
210
+ } || echo "✅ Version is new. Proceeding with publish."
211
+
212
+ - name: Simulate publish package to GPR
213
+ run: npm publish --dry-run
214
+ env:
215
+ NODE_AUTH_TOKEN: ${{ secrets.NWPRO_GPR }}
@@ -0,0 +1,47 @@
1
+ # check-codeql.template.yml
2
+ #
3
+ # Reusable GitHub Actions workflow to enforce that the latest CodeQL scan
4
+ # has completed successfully.
5
+ #
6
+ # Version: v1.0.0
7
+ # Maintainer: Scott Lopez <support@neteng.pro>
8
+ # Usage: Copy to `.github/workflows/check-codeql.yml` in your repo or reference directly if shared centrally.
9
+ #
10
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
11
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
12
+ # This file is part of Network Pro
13
+
14
+ name: Reusable CodeQL Status Check
15
+
16
+ permissions:
17
+ actions: read
18
+ contents: read
19
+
20
+ on:
21
+ workflow_call:
22
+
23
+ jobs:
24
+ check:
25
+ name: Check CodeQL Status
26
+ runs-on: ubuntu-24.04
27
+
28
+ steps:
29
+ - name: Check CodeQL Workflow
30
+ env:
31
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32
+ run: |
33
+ gh --version
34
+
35
+ if ! gh run list --repo "${GITHUB_REPOSITORY}" --workflow "CodeQL" --limit 1 --json conclusion --jq '.[0].conclusion' > codeql_status.txt; then
36
+ echo "::error title=CodeQL Check Failed::Could not retrieve CodeQL run status. Blocking deployment."
37
+ exit 1
38
+ fi
39
+
40
+ CODEQL_STATUS=$(cat codeql_status.txt)
41
+ echo "CodeQL status: $CODEQL_STATUS"
42
+ if [[ "$CODEQL_STATUS" != "success" ]]; then
43
+ echo "::error title=CodeQL Check Failed::Latest CodeQL run did not succeed. Blocking deployment."
44
+ exit 1
45
+ fi
46
+
47
+ rm -f codeql_status.txt
@@ -0,0 +1,37 @@
1
+ /* ==========================================================================
2
+ .lighthouserc.cjs
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
+ module.exports = {
10
+ ci: {
11
+ collect: {
12
+ url: ['https://netwk.pro'],
13
+ numberOfRuns: 1,
14
+ settings: {
15
+ onlyCategories: [
16
+ 'performance',
17
+ 'accessibility',
18
+ 'best-practices',
19
+ 'seo',
20
+ ],
21
+ disableFullPageScreenshot: true,
22
+ },
23
+ },
24
+ assert: {
25
+ preset: 'none',
26
+ assertions: {
27
+ // Add budget checks by asserting that "resource-summary" does not exceed budget
28
+ 'resource-summary': ['error', { budgetPath: 'budget.json' }],
29
+ },
30
+ },
31
+ upload: {
32
+ target: 'filesystem',
33
+ outputDir: './.lighthouseci',
34
+ reporter: ['html', 'json'],
35
+ },
36
+ },
37
+ };
@@ -0,0 +1,31 @@
1
+ /* ==========================================================================
2
+ .markdownlint.mjs
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
+ import noSmartQuotes from './.md-smart-quotes.js'; // adjust path as needed
10
+
11
+ export default {
12
+ // Enable all default rules, then override below
13
+ default: true,
14
+
15
+ // Custom rule: disallow curly (smart) quotes
16
+ customRules: [noSmartQuotes],
17
+
18
+ // Rule exceptions
19
+ MD041: false, // First line in file should be a top-level header
20
+ MD033: false, // Allow inline HTML
21
+ MD013: false, // Ignore line length
22
+
23
+ // Additional parser options
24
+ options: {
25
+ frontMatter: '^---\\n[\\s\\S]*?\\n---', // YAML front matter regex
26
+ },
27
+
28
+ // Rule-specific configurations
29
+ MD007: { indent: 2 }, // Set consistent unordered list indentation (e.g., 2 spaces)
30
+ MD029: { style: 'ordered' }, // Enforce consistent ordered list numbering
31
+ };
@@ -0,0 +1,31 @@
1
+ /* ==========================================================================
2
+ .md-smart-quotes.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
+ export default {
10
+ names: ['no-smart-quotes'],
11
+ description: 'Disallow smart quotes (curly quotes)',
12
+ information: new URL('https://github.com/DavidAnson/markdownlint'),
13
+ tags: ['quotes', 'style'],
14
+ function(params, onError) {
15
+ const smartQuoteRegex = /[“”‘’]/g;
16
+
17
+ params.tokens.forEach((token) => {
18
+ if (token.type === 'inline' && smartQuoteRegex.test(token.content)) {
19
+ const matches = [...token.content.matchAll(smartQuoteRegex)];
20
+ matches.forEach((match) => {
21
+ const index = match.index;
22
+ onError({
23
+ lineNumber: token.lineNumber,
24
+ detail: `Smart quote (${match[0]}) detected`,
25
+ range: [index + 1, 1],
26
+ });
27
+ });
28
+ }
29
+ });
30
+ },
31
+ };
package/.node-version ADDED
@@ -0,0 +1 @@
1
+ 24.2.0
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 24.2.0
@@ -0,0 +1,55 @@
1
+ # .prettierignore
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro.
6
+
7
+ # Custom ignores
8
+ .markdownlint.jsonc
9
+
10
+
11
+ # Licenses
12
+ static/bin/license
13
+
14
+ # Minified CSS
15
+ *.min.css
16
+
17
+ # SvelteKit
18
+ .svelte-kit/*
19
+ src/lib/styles
20
+ src/lib/*.js
21
+ src/lib/data/*.js
22
+
23
+ # Node.js dependencies
24
+ node_modules
25
+
26
+ # Build artifacts
27
+ build
28
+ .vite
29
+ .cache
30
+ coverage
31
+
32
+ # Temporary files
33
+ *.lock
34
+ *.tmp
35
+ *.swp
36
+ *.bak
37
+
38
+ # Static assets
39
+ **/*.png
40
+ **/*.jpg
41
+ **/*.jpeg
42
+ **/*.gif
43
+ **/*.svg
44
+ **/*.woff
45
+ **/*.woff2
46
+ **/*.ttf
47
+ **/*.eot
48
+
49
+ # Generated files
50
+ **/*.d.ts
51
+ **/generated/*
52
+
53
+ # Configuration files
54
+ package.json
55
+ package-lock.json
package/.prettierrc ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "printWidth": 80,
3
+ "tabWidth": 2,
4
+ "useTabs": false,
5
+ "semi": true,
6
+ "singleQuote": true,
7
+ "quoteProps": "as-needed",
8
+ "jsxSingleQuote": true,
9
+ "trailingComma": "all",
10
+ "bracketSpacing": true,
11
+ "objectWrap": "preserve",
12
+ "bracketSameLine": true,
13
+ "arrowParens": "always",
14
+ "requirePragma": false,
15
+ "insertPragma": false,
16
+ "proseWrap": "preserve",
17
+ "htmlWhitespaceSensitivity": "strict",
18
+ "endOfLine": "lf",
19
+ "singleAttributePerLine": false,
20
+ "plugins": ["prettier-plugin-svelte"],
21
+ "overrides": [
22
+ {
23
+ "files": "*.svelte",
24
+ "options": {
25
+ "parser": "svelte"
26
+ }
27
+ },
28
+ {
29
+ "files": "*.jsonc",
30
+ "options": {
31
+ "trailingComma": "none"
32
+ }
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,43 @@
1
+ # .stylelintignore
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro.
6
+
7
+ # Report files and test results
8
+ playwright-report
9
+ test-results
10
+
11
+ # Node.js dependencies
12
+ node_modules
13
+
14
+ # Build artifacts
15
+ build
16
+ .vite
17
+ .cache
18
+ coverage
19
+
20
+ # Temporary files
21
+ *.lock
22
+ *.tmp
23
+ *.swp
24
+ *.bak
25
+
26
+ # Static assets
27
+ **/*.png
28
+ **/*.jpg
29
+ **/*.jpeg
30
+ **/*.gif
31
+ **/*.svg
32
+ **/*.woff
33
+ **/*.woff2
34
+ **/*.ttf
35
+ **/*.eot
36
+
37
+ # Generated files
38
+ **/*.d.ts
39
+ **/generated/*
40
+
41
+ # Configuration files
42
+ package.json
43
+ package-lock.json
@@ -0,0 +1,49 @@
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "$lib": [
5
+ "../src/lib"
6
+ ],
7
+ "$lib/*": [
8
+ "../src/lib/*"
9
+ ]
10
+ },
11
+ "rootDirs": [
12
+ "..",
13
+ "./types"
14
+ ],
15
+ "verbatimModuleSyntax": true,
16
+ "isolatedModules": true,
17
+ "lib": [
18
+ "esnext",
19
+ "DOM",
20
+ "DOM.Iterable"
21
+ ],
22
+ "moduleResolution": "bundler",
23
+ "module": "esnext",
24
+ "noEmit": true,
25
+ "target": "esnext"
26
+ },
27
+ "include": [
28
+ "ambient.d.ts",
29
+ "non-ambient.d.ts",
30
+ "./types/**/$types.d.ts",
31
+ "../vite.config.js",
32
+ "../vite.config.ts",
33
+ "../src/**/*.js",
34
+ "../src/**/*.ts",
35
+ "../src/**/*.svelte",
36
+ "../tests/**/*.js",
37
+ "../tests/**/*.ts",
38
+ "../tests/**/*.svelte"
39
+ ],
40
+ "exclude": [
41
+ "../node_modules/**",
42
+ "../src/service-worker.js",
43
+ "../src/service-worker/**/*.js",
44
+ "../src/service-worker.ts",
45
+ "../src/service-worker/**/*.ts",
46
+ "../src/service-worker.d.ts",
47
+ "../src/service-worker/**/*.d.ts"
48
+ ]
49
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "version": 1,
3
+ "selectors": [
4
+ {
5
+ "name": ".fas",
6
+ "description": "FontAwesome v6 solid icon class"
7
+ },
8
+ {
9
+ "name": ".fa-solid",
10
+ "description": "FontAwesome old solid icon class"
11
+ },
12
+ {
13
+ "name": ".fab",
14
+ "description": "FontAwesome v6 brand icon class"
15
+ },
16
+ {
17
+ "name": ".fa-brands",
18
+ "description": "FontAwsome old brand icon class"
19
+ },
20
+ {
21
+ "name": ".fa-square-instagram",
22
+ "description": "FontAwesome brands Instagram icon class"
23
+ },
24
+ {
25
+ "name": ".fa-square-github",
26
+ "description": "FontAwesome brands GitHub icon class"
27
+ },
28
+ {
29
+ "name": ".fa-linkedin",
30
+ "description": "FontAwesome brands LinkedIn icon class"
31
+ },
32
+ {
33
+ "name": ".fa-square-facebook",
34
+ "description": "FontAwesome brands Facebook icon class"
35
+ },
36
+ {
37
+ "name": ".fa-mastodon",
38
+ "description": "FontAwesome brands Pinterest icon class"
39
+ },
40
+ {
41
+ "name": ".fa-arrow-up-right",
42
+ "description": "FontAwesome arrow up right icon class"
43
+ },
44
+ {
45
+ "name": ".fa-arrow-up-right-from-square",
46
+ "description": "FontAwesome arrow up right from square icon class"
47
+ },
48
+ {
49
+ "name": ".fa-file-arrow-down",
50
+ "description": "FontAwesome download file icon class"
51
+ },
52
+ {
53
+ "name": ".fa-2x",
54
+ "description": "FontAwesome 2x extra large icon size class"
55
+ },
56
+ {
57
+ "name": ".fa-lg",
58
+ "description": "FontAwesome large icon size class"
59
+ },
60
+ {
61
+ "name": ".fa-sm",
62
+ "description": "FontAwesome small icon size class"
63
+ },
64
+ {
65
+ "name": ".fa-xs",
66
+ "description": "FontAwesome extra small icon size class"
67
+ },
68
+ {
69
+ "name": ".fa-2xs",
70
+ "description": "FontAwesome 2x extra small icon size class"
71
+ }
72
+ ]
73
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "recommendations": [
3
+ "svelte.svelte-vscode",
4
+ "esbenp.prettier-vscode",
5
+ "dbaeumer.vscode-eslint",
6
+ "stylelint.vscode-stylelint",
7
+ "DavidAnson.vscode-markdownlint",
8
+ "editorconfig.editorconfig",
9
+ "ms-playwright.playwright",
10
+ "vitest.explorer",
11
+ "streetsidesoftware.code-spell-checker"
12
+ ]
13
+ }
@@ -0,0 +1,24 @@
1
+ /* ==========================================================================
2
+ extensions.jsonc
3
+
4
+ NOTE: This file is for reference only and is not actively used by VS Code.
5
+ VS Code uses the extensions.json file without comments for actual configuration.
6
+
7
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
8
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
9
+ This file is part of Network Pro.
10
+ ========================================================================== */
11
+
12
+ {
13
+ "recommendations": [
14
+ "svelte.svelte-vscode", // Svelte language support
15
+ "esbenp.prettier-vscode", // Prettier formatting
16
+ "dbaeumer.vscode-eslint", // JavaScript/TypeScript linting
17
+ "stylelint.vscode-stylelint", // CSS/SASS/Svelte linting
18
+ "DavidAnson.vscode-markdownlint", // Markdown linting
19
+ "editorconfig.editorconfig", // Respect .editorconfig rules
20
+ "ms-playwright.playwright", // E2E testing with Playwright
21
+ "vitest.explorer", // Vitest test explorer panel
22
+ "streetsidesoftware.code-spell-checker" // Inline spell checking (comments, Markdown, etc.)
23
+ ]
24
+ }