portapack 0.3.0 → 0.3.2

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 (74) hide show
  1. package/.eslintrc.json +67 -8
  2. package/.github/workflows/ci.yml +5 -4
  3. package/.releaserc.js +25 -27
  4. package/CHANGELOG.md +12 -19
  5. package/LICENSE.md +21 -0
  6. package/README.md +34 -36
  7. package/commitlint.config.js +30 -34
  8. package/dist/cli/cli-entry.cjs +199 -135
  9. package/dist/cli/cli-entry.cjs.map +1 -1
  10. package/dist/index.d.ts +0 -3
  11. package/dist/index.js +194 -134
  12. package/dist/index.js.map +1 -1
  13. package/docs/.vitepress/config.ts +36 -34
  14. package/docs/.vitepress/sidebar-generator.ts +89 -38
  15. package/docs/cli.md +29 -82
  16. package/docs/code-of-conduct.md +7 -1
  17. package/docs/configuration.md +103 -117
  18. package/docs/contributing.md +6 -2
  19. package/docs/deployment.md +10 -5
  20. package/docs/development.md +8 -5
  21. package/docs/getting-started.md +76 -45
  22. package/docs/index.md +1 -1
  23. package/docs/public/android-chrome-192x192.png +0 -0
  24. package/docs/public/android-chrome-512x512.png +0 -0
  25. package/docs/public/apple-touch-icon.png +0 -0
  26. package/docs/public/favicon-16x16.png +0 -0
  27. package/docs/public/favicon-32x32.png +0 -0
  28. package/docs/public/favicon.ico +0 -0
  29. package/docs/site.webmanifest +1 -0
  30. package/docs/troubleshooting.md +12 -1
  31. package/examples/main.ts +7 -10
  32. package/examples/sample-project/script.js +1 -1
  33. package/jest.config.ts +8 -13
  34. package/nodemon.json +5 -10
  35. package/package.json +2 -5
  36. package/src/cli/cli-entry.ts +2 -2
  37. package/src/cli/cli.ts +21 -16
  38. package/src/cli/options.ts +127 -113
  39. package/src/core/bundler.ts +254 -221
  40. package/src/core/extractor.ts +639 -520
  41. package/src/core/minifier.ts +173 -162
  42. package/src/core/packer.ts +141 -137
  43. package/src/core/parser.ts +74 -73
  44. package/src/core/web-fetcher.ts +270 -258
  45. package/src/index.ts +18 -17
  46. package/src/types.ts +9 -11
  47. package/src/utils/font.ts +12 -6
  48. package/src/utils/logger.ts +110 -105
  49. package/src/utils/meta.ts +75 -76
  50. package/src/utils/mime.ts +50 -50
  51. package/src/utils/slugify.ts +33 -34
  52. package/tests/unit/cli/cli-entry.test.ts +72 -70
  53. package/tests/unit/cli/cli.test.ts +314 -278
  54. package/tests/unit/cli/options.test.ts +294 -301
  55. package/tests/unit/core/bundler.test.ts +426 -329
  56. package/tests/unit/core/extractor.test.ts +828 -380
  57. package/tests/unit/core/minifier.test.ts +374 -274
  58. package/tests/unit/core/packer.test.ts +298 -264
  59. package/tests/unit/core/parser.test.ts +538 -150
  60. package/tests/unit/core/web-fetcher.test.ts +389 -359
  61. package/tests/unit/index.test.ts +238 -197
  62. package/tests/unit/utils/font.test.ts +26 -21
  63. package/tests/unit/utils/logger.test.ts +267 -260
  64. package/tests/unit/utils/meta.test.ts +29 -28
  65. package/tests/unit/utils/mime.test.ts +73 -74
  66. package/tests/unit/utils/slugify.test.ts +14 -12
  67. package/tsconfig.build.json +9 -10
  68. package/tsconfig.jest.json +2 -1
  69. package/tsconfig.json +2 -2
  70. package/tsup.config.ts +8 -8
  71. package/typedoc.json +5 -9
  72. package/docs/demo.md +0 -46
  73. /package/docs/{portapack-transparent.png → public/portapack-transparent.png} +0 -0
  74. /package/docs/{portapack.jpg → public/portapack.jpg} +0 -0
@@ -1,5 +1,5 @@
1
- import { defineConfig } from 'vitepress'
2
- import { buildDocsSidebar } from './sidebar-generator'
1
+ import { defineConfig } from 'vitepress';
2
+ import { buildDocsSidebar } from './sidebar-generator';
3
3
 
4
4
  export default defineConfig({
5
5
  base: '/portapack/',
@@ -7,49 +7,51 @@ export default defineConfig({
7
7
  description: 'Bundle & Minify HTML into a Single Portable File',
8
8
  appearance: 'dark',
9
9
  lastUpdated: true,
10
-
10
+
11
11
  head: [
12
- ['link', { rel: 'icon', href: '/favicon.png' }],
12
+ ['link', { rel: 'icon', href: '/portapack/favicon.ico' }],
13
13
  ['meta', { name: 'og:title', content: 'PortaPack' }],
14
- ['meta', { name: 'og:description', content: 'Bundle & Minify HTML into a Single Portable File' }],
15
- ['meta', { name: 'og:image', content: '/og-image.png' }],
16
- ['meta', { name: 'twitter:card', content: 'summary_large_image' }]
14
+ [
15
+ 'meta',
16
+ { name: 'og:description', content: 'Bundle & Minify HTML into a Single Portable File' },
17
+ ],
18
+ ['meta', { name: 'og:image', content: '/portapack/portapack.jpg' }], // Updated to use your non-transparent logo
19
+ ['meta', { name: 'twitter:card', content: 'summary_large_image' }],
17
20
  ],
18
21
 
19
22
  themeConfig: {
20
- logo: '/logo.png',
21
-
23
+ logo: '/portapack-transparent.png', // This path is relative to the public directory
24
+
22
25
  socialLinks: [
23
26
  { icon: 'github', link: 'https://github.com/manicinc/portapack' },
24
27
  { icon: 'twitter', link: 'https://x.com/manicagency' },
25
28
  { icon: 'discord', link: 'https://discord.gg/DzNgXdYm' },
26
- {
29
+ {
27
30
  icon: {
28
- svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/></svg>'
29
- },
30
- link: 'https://www.linkedin.com/company/manic-agency-llc/'
31
- }
31
+ svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/></svg>',
32
+ },
33
+ link: 'https://www.linkedin.com/company/manic-agency-llc/',
34
+ },
32
35
  ],
33
36
 
34
37
  footer: {
35
38
  message: 'Released under the MIT License',
36
- copyright: '© 2025 Manic Agency. All rights reserved.'
39
+ copyright: '© 2025 Manic Agency. All rights reserved.',
37
40
  },
38
41
 
39
42
  nav: [
40
43
  { text: 'Home', link: '/' },
41
44
  { text: 'Getting Started', link: '/getting-started' },
42
- {
43
- text: 'Docs',
45
+ {
46
+ text: 'Docs',
44
47
  items: [
45
48
  { text: 'CLI Reference', link: '/cli' },
46
49
  { text: 'API', link: '/api/README' },
47
50
  { text: 'Configuration', link: '/configuration' },
48
- { text: 'Advanced Usage', link: '/advanced' }
49
- ]
51
+ { text: 'Advanced Usage', link: '/advanced' },
52
+ ],
50
53
  },
51
- { text: 'Demo', link: '/demo' },
52
- { text: 'Contributing', link: '/contributing' }
54
+ { text: 'Contributing', link: '/contributing' },
53
55
  ],
54
56
 
55
57
  sidebar: {
@@ -60,9 +62,9 @@ export default defineConfig({
60
62
  items: [
61
63
  { text: 'Introduction', link: '/getting-started/' },
62
64
  { text: 'Installation', link: '/getting-started/installation' },
63
- { text: 'Quick Start', link: '/getting-started/quick-start' }
64
- ]
65
- }
65
+ { text: 'Quick Start', link: '/getting-started/quick-start' },
66
+ ],
67
+ },
66
68
  ],
67
69
  '/cli/': [
68
70
  {
@@ -70,9 +72,9 @@ export default defineConfig({
70
72
  items: [
71
73
  { text: 'Overview', link: '/cli/' },
72
74
  { text: 'Commands', link: '/cli/commands' },
73
- { text: 'Options', link: '/cli/options' }
74
- ]
75
- }
75
+ { text: 'Options', link: '/cli/options' },
76
+ ],
77
+ },
76
78
  ],
77
79
  '/configuration/': [
78
80
  {
@@ -80,10 +82,10 @@ export default defineConfig({
80
82
  items: [
81
83
  { text: 'Overview', link: '/configuration/' },
82
84
  { text: 'Options', link: '/configuration/options' },
83
- { text: 'Advanced', link: '/configuration/advanced' }
84
- ]
85
- }
86
- ]
87
- }
88
- }
89
- })
85
+ { text: 'Advanced', link: '/configuration/advanced' },
86
+ ],
87
+ },
88
+ ],
89
+ },
90
+ },
91
+ });
@@ -1,5 +1,6 @@
1
- import { glob } from 'glob'
2
- import path from 'path'
1
+ import { glob } from 'glob';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url'; // Needed for ESM __dirname equivalent
3
4
 
4
5
  /**
5
6
  * Sidebar item interface for VitePress configuration
@@ -11,63 +12,113 @@ export interface SidebarItem {
11
12
  collapsed?: boolean;
12
13
  }
13
14
 
15
+ // --- Helper to get the directory name in ES Modules ---
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = path.dirname(__filename);
18
+ // --- Assuming sidebar-generator.ts is directly inside 'docs' ---
19
+ // If it's deeper, adjust accordingly (e.g., path.resolve(__dirname, '..'))
20
+ const docsDir = __dirname;
21
+ const apiDir = path.join(docsDir, 'api'); // Absolute path to the api directory
22
+
14
23
  /**
15
24
  * Automatically builds sidebar from generated TypeDoc files
16
25
  * @returns Dynamically generated sidebar configuration
17
26
  */
18
27
  export function buildDocsSidebar(): SidebarItem[] {
19
28
  try {
29
+ // Log the directory being scanned
30
+ console.log(`Scanning for markdown files in: ${apiDir}`);
31
+
20
32
  // Get all markdown files from the API docs directory using absolute path
21
- const apiFiles = glob.sync('docs/api/**/*.md', { absolute: true })
22
-
33
+ // Use path.join for cross-platform compatibility
34
+ const apiFiles = glob.sync(path.join(apiDir, '**/*.md').replace(/\\/g, '/'), {
35
+ absolute: true,
36
+ }); // Use forward slashes for glob
37
+
38
+ // Log found files for debugging
39
+ console.log(`Found ${apiFiles.length} API files:`, apiFiles);
40
+
23
41
  // Build sidebar structure
24
- const apiSidebar: SidebarItem[] = []
25
-
42
+ const apiSidebar: SidebarItem[] = [];
43
+
26
44
  // Define documentation sections to process
27
45
  const sections = [
28
46
  { name: 'Modules', path: 'modules' },
29
47
  { name: 'Classes', path: 'classes' },
30
48
  { name: 'Interfaces', path: 'interfaces' },
31
49
  { name: 'Functions', path: 'functions' },
32
- { name: 'Types', path: 'types' }
33
- ]
50
+ { name: 'Types', path: 'types' },
51
+ // Add other sections if needed
52
+ ];
34
53
 
35
54
  // Process each section
36
55
  sections.forEach(({ name, path: sectionPath }) => {
37
- const sectionFiles = apiFiles.filter(file => {
38
- const relativePath = path.relative('docs', file)
39
- return relativePath.includes(`/api/${sectionPath}/`) && !relativePath.endsWith('index.md')
40
- }).map(file => {
41
- const relativePath = path.relative('docs', file)
42
- const basename = path.basename(file, '.md')
43
- return {
44
- text: basename.replace(/^_/, '').replace(/-/g, ' '),
45
- link: '/' + relativePath.replace(/\.md$/, '')
46
- }
47
- })
48
-
56
+ // Filter files based on the absolute path to the section directory
57
+ const sectionDir = path.join(apiDir, sectionPath);
58
+ const sectionFiles = apiFiles
59
+ .filter(file => {
60
+ // Check if the file is within the current section's directory
61
+ // and is not an index file directly within that section directory
62
+ const fileDirPath = path.dirname(file);
63
+ return (
64
+ file.startsWith(sectionDir) && fileDirPath !== sectionDir && !file.endsWith('index.md')
65
+ );
66
+ // Alternative, simpler check if structure is flat within sections:
67
+ // return file.startsWith(path.join(apiDir, sectionPath, '/')) && !file.endsWith('index.md');
68
+ })
69
+ .map(file => {
70
+ // Calculate path relative to the 'docs' directory for the link
71
+ const relativePath = path.relative(docsDir, file);
72
+ const basename = path.basename(file, '.md');
73
+ const link = '/' + relativePath.replace(/\\/g, '/').replace(/\.md$/, ''); // Ensure forward slashes for URL
74
+
75
+ console.log(`Processing file: ${file}, Relative Path: ${relativePath}, Link: ${link}`); // Debug log
76
+
77
+ return {
78
+ text: basename.replace(/^_/, '').replace(/-/g, ' '), // Basic cleanup
79
+ link: link,
80
+ };
81
+ })
82
+ .sort((a, b) => a.text.localeCompare(b.text)); // Sort items alphabetically
83
+
49
84
  if (sectionFiles.length > 0) {
50
85
  apiSidebar.push({
51
86
  text: name,
52
- collapsed: false,
53
- items: sectionFiles
54
- })
87
+ collapsed: false, // Or true if you prefer them collapsed
88
+ items: sectionFiles,
89
+ });
55
90
  }
56
- })
57
-
58
- // Add main API index as first item
59
- apiSidebar.unshift({
60
- text: 'API Reference',
61
- link: '/api/'
62
- })
63
-
64
- return apiSidebar
91
+ });
92
+
93
+ // Add main API index if it exists (relative to docsDir)
94
+ const mainApiIndex = path.join(apiDir, 'index.md'); // Or maybe README.md? Check your TypeDoc output
95
+ // Check if the main index file exists using glob result or fs.existsSync
96
+ const mainApiIndexExists = apiFiles.some(file => file === mainApiIndex);
97
+
98
+ if (mainApiIndexExists) {
99
+ apiSidebar.unshift({
100
+ text: 'API Overview', // Or 'API Reference'
101
+ link: '/api/', // Link to the root index file of the API section
102
+ });
103
+ } else {
104
+ // Maybe add a placeholder or log a warning if the main index is missing
105
+ console.warn(
106
+ 'Main API index file (e.g., docs/api/index.md or docs/api/README.md) not found.'
107
+ );
108
+ }
109
+
110
+ // Log the final generated sidebar
111
+ console.log('Generated API Sidebar:', JSON.stringify(apiSidebar, null, 2));
112
+
113
+ return apiSidebar;
65
114
  } catch (error) {
66
- console.error('Error building docs sidebar:', error)
115
+ console.error('Error building docs sidebar:', error);
67
116
  // Return basic sidebar if there's an error
68
- return [{
69
- text: 'API Reference',
70
- link: '/api/'
71
- }]
117
+ return [
118
+ {
119
+ text: 'API Reference (Error)',
120
+ link: '/api/',
121
+ },
122
+ ];
72
123
  }
73
- }
124
+ }
package/docs/cli.md CHANGED
@@ -16,46 +16,35 @@ npm install -g portapack
16
16
 
17
17
  ## Command Syntax
18
18
 
19
- PortaPack supports two command styles for specifying input:
19
+ The basic syntax for the PortaPack CLI is:
20
20
 
21
21
  ```bash
22
- # Positional argument style (recommended)
23
- portapack <path_or_url> [options]
24
-
25
- # Named argument style
26
- portapack --input <path_or_url> [options]
27
- # or using shorthand
28
- portapack -i <path_or_url> [options]
22
+ portapack [input] [options]
29
23
  ```
30
24
 
31
- Both methods work identically - choose whichever you prefer.
25
+ Where `[input]` is the path to a local HTML file or a remote URL.
32
26
 
33
27
  ## Options
34
28
 
35
- | Option | Shorthand | Description | Default |
36
- |--------|-----------|-------------|---------|
37
- | `<path_or_url>` or `--input <path_or_url>` | `-i` | Required. Input local file path or remote URL (http/https) to process. | - |
38
- | `--output <file>` | `-o` | Output file path for the bundled HTML. | `{input}.packed.html` |
39
- | `--minify` | `-m` | Enable all minification (HTML, CSS, JS). | - |
40
- | `--no-minify` | | Disable all asset minification (HTML, CSS, JS). | `false` |
41
- | `--no-minify-html` | | Disable only HTML minification. | `false` |
42
- | `--no-minify-css` | | Disable only CSS minification. | `false` |
43
- | `--no-minify-js` | | Disable only JavaScript minification. | `false` |
44
- | `--recursive [depth]` | `-r` | Recursively bundle links up to depth. If depth omitted, defaults to 1. Only applies to remote URLs. | - (disabled) |
45
- | `--max-depth <n>` | | Set maximum depth for recursive crawling (alternative to `-r <n>`). | - |
46
- | `--base-url <url>` | `-b` | Base URL for resolving relative URLs found in the input HTML. | Input path/URL |
47
- | `--embed-assets` | `-e` | Embed external assets (CSS, JS, images, fonts) as data URIs or inline content. | `true` |
48
- | `--no-embed-assets` | | Keep external assets as links (requires network access when viewing). | `false` |
49
- | `--timeout <ms>` | `-t` | Network timeout in milliseconds for fetching remote resources. | `30000` (30 seconds) |
50
- | `--user-agent <string>` | `-U` | Custom User-Agent string for network requests. | Default Node.js agent |
51
- | `--include <glob>` | | Glob pattern for URLs to include during recursion (can be specified multiple times). | `**` (all) |
52
- | `--exclude <glob>` | | Glob pattern for URLs to exclude during recursion (can be specified multiple times). | - |
53
- | `--log-level <level>` | `-l` | Set logging level (debug, info, warn, error, silent). | `info` |
54
- | `--verbose` | `-v` | Enable verbose logging (shortcut for `--log-level debug`). | `false` |
55
- | `--config <path>` | `-c` | Path to a configuration file (e.g., `.portapackrc.json`) to load options from. | - |
56
- | `--dry-run` | `-d` | Perform all steps except writing the output file. Logs intended actions. | `false` |
57
- | `--help` | `-h` | Show help information and exit. | - |
58
- | `--version` | | Show PortaPack CLI version number and exit. | - |
29
+ | Option | Shorthand | Description | Default |
30
+ | --------------------- | --------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------ |
31
+ | `[input]` | | Required. Input local file path or remote URL (http/https) to process. | - |
32
+ | `--output <file>` | `-o` | Output file path for the bundled HTML. | `{input-basename}.packed.html` |
33
+ | `--recursive [depth]` | `-r` | Recursively bundle links up to depth. If depth omitted, defaults to true (no limit). Only applies to remote URLs. | `false` (disabled) |
34
+ | `--max-depth <n>` | | Set maximum depth for recursive crawling (alternative to `-r <n>`). | - |
35
+ | `--minify` | `-m` | Enable all minification (HTML, CSS, JS). | - |
36
+ | `--no-minify` | | Disable all asset minification (HTML, CSS, JS). | `false` |
37
+ | `--no-minify-html` | | Disable only HTML minification. | `false` |
38
+ | `--no-minify-css` | | Disable only CSS minification. | `false` |
39
+ | `--no-minify-js` | | Disable only JavaScript minification. | `false` |
40
+ | `--embed-assets` | `-e` | Embed external assets (CSS, JS, images, fonts) as data URIs or inline content. | `true` |
41
+ | `--no-embed-assets` | | Keep external assets as links (requires network access when viewing). | `false` |
42
+ | `--base-url <url>` | `-b` | Base URL for resolving relative URLs found in the input HTML. | Input path/URL |
43
+ | `--log-level <level>` | | Set logging level (debug, info, warn, error, silent, none). | `info` |
44
+ | `--verbose` | `-v` | Enable verbose logging (shortcut for `--log-level debug`). | `false` |
45
+ | `--dry-run` | `-d` | Perform all steps except writing the output file. Logs intended actions. | `false` |
46
+ | `--help` | `-h` | Show help information and exit. | - |
47
+ | `--version` | | Show PortaPack CLI version number and exit. | - |
59
48
 
60
49
  ## Examples
61
50
 
@@ -64,21 +53,13 @@ Both methods work identically - choose whichever you prefer.
64
53
  Bundle `index.html` into `bundle.html`:
65
54
 
66
55
  ```bash
67
- # Using positional argument style
68
56
  portapack ./index.html -o bundle.html
69
-
70
- # Using named argument style
71
- portapack -i ./index.html -o bundle.html
72
57
  ```
73
58
 
74
- Use default output name (`index.html.packed.html`):
59
+ Use default output name (`index.packed.html`):
75
60
 
76
61
  ```bash
77
- # Using positional argument style
78
62
  portapack ./index.html
79
-
80
- # Using named argument style
81
- portapack -i ./index.html
82
63
  ```
83
64
 
84
65
  ### Web Page Bundling
@@ -86,11 +67,7 @@ portapack -i ./index.html
86
67
  Bundle a single remote webpage:
87
68
 
88
69
  ```bash
89
- # Using positional argument style
90
70
  portapack https://example.com -o example-bundle.html
91
-
92
- # Using named argument style
93
- portapack -i https://example.com -o example-bundle.html
94
71
  ```
95
72
 
96
73
  ### Recursive Bundling
@@ -113,15 +90,6 @@ Alternative using `--max-depth` option:
113
90
  portapack https://example.com --max-depth 2 -o site-bundle-depth2.html
114
91
  ```
115
92
 
116
- Recursively bundle only blog posts, excluding images:
117
-
118
- ```bash
119
- portapack https://example.com -r \
120
- --include "/blog/**" \
121
- --exclude "**/*.{jpg,png,gif}" \
122
- -o blog-bundle.html
123
- ```
124
-
125
93
  ### Asset Handling
126
94
 
127
95
  Bundle without embedding assets (keep external links):
@@ -160,14 +128,6 @@ portapack ./index.html --no-minify-html -o selective-min.html
160
128
  portapack ./index.html --no-minify-js -o no-js-min.html
161
129
  ```
162
130
 
163
- ### Advanced Network Options
164
-
165
- Bundle a remote page with a longer timeout and custom user agent:
166
-
167
- ```bash
168
- portapack https://example.com -t 60000 -U "MyCustomBot/1.0" -o example-custom.html
169
- ```
170
-
171
131
  ### Base URL for Relative Links
172
132
 
173
133
  Process a local file as if it were hosted at https://example.com:
@@ -198,14 +158,6 @@ See what files and assets would be processed without saving:
198
158
  portapack ./index.html --dry-run
199
159
  ```
200
160
 
201
- ### Using a Configuration File
202
-
203
- Load options from a config file:
204
-
205
- ```bash
206
- portapack -c ./.portapackrc.json
207
- ```
208
-
209
161
  ### NPX Usage
210
162
 
211
163
  Use PortaPack without installing globally:
@@ -217,17 +169,12 @@ npx portapack ./index.html -o bundle.html
217
169
  ## Exit Codes
218
170
 
219
171
  | Code | Description |
220
- |------|-------------|
221
- | 0 | Success |
222
- | 1 | General Error (e.g., invalid options, file IO) |
223
- | 2 | Input Error (e.g., missing input, invalid URL) |
224
- | 3 | Network Error (e.g., fetch failed, timeout) |
225
- | 4 | Processing Error (e.g., parsing failed) |
226
-
227
- (Note: Specific error codes might vary)
172
+ | ---- | ----------- |
173
+ | 0 | Success |
174
+ | 1 | Error |
228
175
 
229
176
  ## Related Resources
230
177
 
231
- - Getting Started (Link needs validation)
232
- - API Reference (Link needs validation)
233
- - Configuration Guide (Link needs validation)
178
+ - [Getting Started](https://manicinc.github.io/portapack/getting-started)
179
+ - [API Reference](https://manicinc.github.io/portapack/api/)
180
+ - [Configuration Guide](https://manicinc.github.io/portapack/configuration)
@@ -3,6 +3,7 @@
3
3
  ## Our Pledge
4
4
 
5
5
  We are committed to providing a friendly, safe, and welcoming environment for all contributors, regardless of:
6
+
6
7
  - Age
7
8
  - Body size
8
9
  - Disability
@@ -18,6 +19,7 @@ We are committed to providing a friendly, safe, and welcoming environment for al
18
19
  ## Our Standards
19
20
 
20
21
  ### Positive Behavior
22
+
21
23
  - Using welcoming and inclusive language
22
24
  - Being respectful of differing viewpoints
23
25
  - Gracefully accepting constructive criticism
@@ -25,6 +27,7 @@ We are committed to providing a friendly, safe, and welcoming environment for al
25
27
  - Showing empathy towards other community members
26
28
 
27
29
  ### Unacceptable Behavior
30
+
28
31
  - Trolling, insulting/derogatory comments
29
32
  - Public or private harassment
30
33
  - Publishing others' private information
@@ -33,6 +36,7 @@ We are committed to providing a friendly, safe, and welcoming environment for al
33
36
  ## Enforcement Responsibilities
34
37
 
35
38
  Community leaders are responsible for:
39
+
36
40
  - Clarifying acceptable behavior standards
37
41
  - Providing fair and consistent feedback
38
42
  - Removing, editing, or rejecting contributions that violate this Code of Conduct
@@ -40,6 +44,7 @@ Community leaders are responsible for:
40
44
  ## Reporting Issues
41
45
 
42
46
  If you experience or witness unacceptable behavior:
47
+
43
48
  1. Email [conduct@manicinc.com](mailto:conduct@manicinc.com)
44
49
  2. Provide:
45
50
  - Your contact information
@@ -50,6 +55,7 @@ If you experience or witness unacceptable behavior:
50
55
  ## Consequences
51
56
 
52
57
  Violations may result in:
58
+
53
59
  - Temporary or permanent ban from community spaces
54
60
  - Removal of contributions
55
61
  - Public or private warnings
@@ -62,4 +68,4 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], versi
62
68
 
63
69
  ## License
64
70
 
65
- This Code of Conduct is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).
71
+ This Code of Conduct is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/).