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.
- package/.eslintrc.json +67 -8
- package/.github/workflows/ci.yml +5 -4
- package/.releaserc.js +25 -27
- package/CHANGELOG.md +12 -19
- package/LICENSE.md +21 -0
- package/README.md +34 -36
- package/commitlint.config.js +30 -34
- package/dist/cli/cli-entry.cjs +199 -135
- package/dist/cli/cli-entry.cjs.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.js +194 -134
- package/dist/index.js.map +1 -1
- package/docs/.vitepress/config.ts +36 -34
- package/docs/.vitepress/sidebar-generator.ts +89 -38
- package/docs/cli.md +29 -82
- package/docs/code-of-conduct.md +7 -1
- package/docs/configuration.md +103 -117
- package/docs/contributing.md +6 -2
- package/docs/deployment.md +10 -5
- package/docs/development.md +8 -5
- package/docs/getting-started.md +76 -45
- package/docs/index.md +1 -1
- package/docs/public/android-chrome-192x192.png +0 -0
- package/docs/public/android-chrome-512x512.png +0 -0
- package/docs/public/apple-touch-icon.png +0 -0
- package/docs/public/favicon-16x16.png +0 -0
- package/docs/public/favicon-32x32.png +0 -0
- package/docs/public/favicon.ico +0 -0
- package/docs/site.webmanifest +1 -0
- package/docs/troubleshooting.md +12 -1
- package/examples/main.ts +7 -10
- package/examples/sample-project/script.js +1 -1
- package/jest.config.ts +8 -13
- package/nodemon.json +5 -10
- package/package.json +2 -5
- package/src/cli/cli-entry.ts +2 -2
- package/src/cli/cli.ts +21 -16
- package/src/cli/options.ts +127 -113
- package/src/core/bundler.ts +254 -221
- package/src/core/extractor.ts +639 -520
- package/src/core/minifier.ts +173 -162
- package/src/core/packer.ts +141 -137
- package/src/core/parser.ts +74 -73
- package/src/core/web-fetcher.ts +270 -258
- package/src/index.ts +18 -17
- package/src/types.ts +9 -11
- package/src/utils/font.ts +12 -6
- package/src/utils/logger.ts +110 -105
- package/src/utils/meta.ts +75 -76
- package/src/utils/mime.ts +50 -50
- package/src/utils/slugify.ts +33 -34
- package/tests/unit/cli/cli-entry.test.ts +72 -70
- package/tests/unit/cli/cli.test.ts +314 -278
- package/tests/unit/cli/options.test.ts +294 -301
- package/tests/unit/core/bundler.test.ts +426 -329
- package/tests/unit/core/extractor.test.ts +828 -380
- package/tests/unit/core/minifier.test.ts +374 -274
- package/tests/unit/core/packer.test.ts +298 -264
- package/tests/unit/core/parser.test.ts +538 -150
- package/tests/unit/core/web-fetcher.test.ts +389 -359
- package/tests/unit/index.test.ts +238 -197
- package/tests/unit/utils/font.test.ts +26 -21
- package/tests/unit/utils/logger.test.ts +267 -260
- package/tests/unit/utils/meta.test.ts +29 -28
- package/tests/unit/utils/mime.test.ts +73 -74
- package/tests/unit/utils/slugify.test.ts +14 -12
- package/tsconfig.build.json +9 -10
- package/tsconfig.jest.json +2 -1
- package/tsconfig.json +2 -2
- package/tsup.config.ts +8 -8
- package/typedoc.json +5 -9
- package/docs/demo.md +0 -46
- /package/docs/{portapack-transparent.png → public/portapack-transparent.png} +0 -0
- /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.
|
12
|
+
['link', { rel: 'icon', href: '/portapack/favicon.ico' }],
|
13
13
|
['meta', { name: 'og:title', content: 'PortaPack' }],
|
14
|
-
[
|
15
|
-
|
16
|
-
|
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: '/
|
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: '
|
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
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
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
|
-
|
70
|
-
|
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
|
-
|
19
|
+
The basic syntax for the PortaPack CLI is:
|
20
20
|
|
21
21
|
```bash
|
22
|
-
|
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
|
-
|
25
|
+
Where `[input]` is the path to a local HTML file or a remote URL.
|
32
26
|
|
33
27
|
## Options
|
34
28
|
|
35
|
-
| Option
|
36
|
-
|
37
|
-
|
|
38
|
-
| `--output <file>`
|
39
|
-
| `--
|
40
|
-
| `--
|
41
|
-
| `--
|
42
|
-
| `--no-minify
|
43
|
-
| `--no-minify-
|
44
|
-
| `--
|
45
|
-
| `--
|
46
|
-
| `--
|
47
|
-
| `--embed-assets`
|
48
|
-
| `--
|
49
|
-
| `--
|
50
|
-
| `--
|
51
|
-
| `--
|
52
|
-
| `--
|
53
|
-
| `--
|
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.
|
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
|
222
|
-
| 1
|
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
|
232
|
-
- API Reference
|
233
|
-
- Configuration Guide
|
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)
|
package/docs/code-of-conduct.md
CHANGED
@@ -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/).
|