@rom-weaver/cli 0.7.2 → 0.9.0
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/{LICENSE.md → LICENSE} +7 -0
- package/README.md +90 -43
- package/package.json +18 -15
package/{LICENSE.md → LICENSE}
RENAMED
package/README.md
CHANGED
|
@@ -7,25 +7,27 @@
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<a href="https://www.npmjs.com/package/rom-weaver"><img alt="npm version" src="https://img.shields.io/npm/v/rom-weaver?logo=npm&logoColor=white&label=npm&color=d9690f"></a>
|
|
9
9
|
<a href="https://crates.io/crates/rom-weaver-cli"><img alt="crates.io version" src="https://img.shields.io/crates/v/rom-weaver-cli?logo=rust&logoColor=white&label=crates.io&color=d9690f"></a>
|
|
10
|
-
<a href="https://github.com/brandonocasey/
|
|
11
|
-
<a href="https://github.com/
|
|
10
|
+
<a href="https://github.com/users/brandonocasey/packages/container/package/rom-weaver-cli"><img alt="Container images on GitHub Container Registry" src="https://img.shields.io/badge/ghcr.io-rom--weaver-d9690f?logo=docker&logoColor=white"></a>
|
|
11
|
+
<a href="https://github.com/rom-weaver/homebrew-tap"><img alt="Homebrew tap" src="https://img.shields.io/badge/homebrew-rom--weaver%2Ftap-d9690f?logo=homebrew&logoColor=white"></a>
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<a href="https://github.com/
|
|
15
|
+
<a href="https://github.com/rom-weaver/rom-weaver/actions/workflows/ci.yml"><img alt="CI status" src="https://img.shields.io/github/actions/workflow/status/rom-weaver/rom-weaver/ci.yml?branch=main&logo=githubactions&logoColor=white&label=CI&color=4a6d63"></a>
|
|
16
16
|
<a href="package.json"><img alt="Node.js 22 or newer" src="https://img.shields.io/badge/Node.js-22%2B-4a6d63?logo=nodedotjs&logoColor=white"></a>
|
|
17
|
-
<a href=".mise.toml"><img alt="Rust 1.95" src="https://img.shields.io/badge/Rust-1.95-2c323b?logo=rust&logoColor=white"></a>
|
|
18
|
-
<a href="LICENSE
|
|
17
|
+
<a href=".config/mise.toml"><img alt="Rust 1.95" src="https://img.shields.io/badge/Rust-1.95-2c323b?logo=rust&logoColor=white"></a>
|
|
18
|
+
<a href="LICENSE"><img alt="AGPL-3.0-or-later license" src="https://img.shields.io/badge/license-AGPL--3.0--or--later-4a6d63"></a>
|
|
19
19
|
</p>
|
|
20
20
|
|
|
21
21
|
<p align="center">
|
|
22
|
-
<a href="https://rom-weaver.com/">Open the webapp</a>
|
|
22
|
+
<a href="https://rom-weaver.com/weave">Open the webapp</a>
|
|
23
23
|
· <a href="docs/README.md">Docs index</a>
|
|
24
|
+
· <a href="https://github.com/sponsors/brandonocasey">Sponsor on GitHub</a>
|
|
24
25
|
· <a href="https://ko-fi.com/brandonocasey">Support on Ko-fi</a>
|
|
25
26
|
</p>
|
|
26
27
|
|
|
27
28
|
<!-- START doctoc -->
|
|
28
29
|
|
|
30
|
+
- [Why](#why)
|
|
29
31
|
- [Features](#features)
|
|
30
32
|
- [Notices](#notices)
|
|
31
33
|
- [Install](#install)
|
|
@@ -36,12 +38,40 @@
|
|
|
36
38
|
|
|
37
39
|
<!-- END doctoc -->
|
|
38
40
|
|
|
41
|
+
## Why
|
|
42
|
+
|
|
43
|
+
Every console generation brought its own compressed format, and each one came
|
|
44
|
+
with its own tool. CHD for discs, RVZ for GameCube and Wii, Z3DS for 3DS, CSO
|
|
45
|
+
and PBP for PSP, plus the usual ZIP and 7z on top. Those tools are scattered
|
|
46
|
+
across projects, most are command-line only, and plenty of them only ship
|
|
47
|
+
builds for one or two platforms. If you are on a Mac, or on Windows without a
|
|
48
|
+
compiler handy, half of them are out of reach. Anyone who has tried to shrink a
|
|
49
|
+
disc collection knows the routine: track down five programs, learn five sets of
|
|
50
|
+
flags, and hope each one still builds.
|
|
51
|
+
|
|
52
|
+
Patching has the same problem from a different angle. Most patchers take one
|
|
53
|
+
patch at a time, so a translation plus a bugfix plus an undub means running the
|
|
54
|
+
tool three times and keeping the intermediate files straight yourself. And
|
|
55
|
+
because almost no patcher reads compressed input, the real sequence is
|
|
56
|
+
decompress, patch, recompress - every time you want to try a different patch or
|
|
57
|
+
redo one you already applied. That is a lot of disk churn and waiting for what
|
|
58
|
+
should be a single step.
|
|
59
|
+
|
|
60
|
+
The last piece is curation. Keeping a collection in order means storing ROMs
|
|
61
|
+
compressed, keeping the patches next to them, and being able to prove months
|
|
62
|
+
later that a patched file came from the ROM you think it did. rom-weaver
|
|
63
|
+
handles all of it in one place: read and write every format above, chain as
|
|
64
|
+
many patches as you want in a single pass without unpacking to disk first, and
|
|
65
|
+
record the whole recipe - patch order, checksums, output names - in a bundle
|
|
66
|
+
file you can hand to someone else. It runs the same on Linux, macOS, and
|
|
67
|
+
Windows, and in the browser if you would rather not install anything.
|
|
68
|
+
|
|
39
69
|
## Features
|
|
40
70
|
|
|
41
|
-
- **Apply and create patches.**
|
|
42
|
-
BDF/BSDIFF40, APS, DCP (Dreamcast),
|
|
43
|
-
|
|
44
|
-
|
|
71
|
+
- **Apply and create patches.** Twenty-one formats, including IPS, BPS, UPS,
|
|
72
|
+
xdelta/VCDIFF, PPF, RUP, BDF/BSDIFF40, APS, and DCP (Dreamcast), with ordered
|
|
73
|
+
multi-patch chains, strict checksum validation, and cheat-code baking. Three
|
|
74
|
+
of them (DCP, BSP, and HDiffPatch) can only be applied, not created.
|
|
45
75
|
- **Inspect and extract containers.** ZIP, 7z, RAR, the tar family, CHD, RVZ,
|
|
46
76
|
Z3DS, CSO, PBP, GCZ, WIA, WBFS, and more, including nested archives.
|
|
47
77
|
- **Create compressed containers.** ZIP, 7z, CHD, RVZ, and Z3DS with
|
|
@@ -78,9 +108,9 @@ rely on the APIs or CLI flags, expect things to be a bit tougher: those
|
|
|
78
108
|
interfaces may still change as the project heads toward v1.0. Trim and Tools are
|
|
79
109
|
currently untested but theoretically working, so they are disabled in the
|
|
80
110
|
current webapp. The `rom-weaver-core`, `-checksum`, `-containers`, and
|
|
81
|
-
`-patches` crates are published to crates.io only so `rom-weaver-cli` can
|
|
82
|
-
|
|
83
|
-
libraries
|
|
111
|
+
`-patches` crates are published to crates.io only so `rom-weaver-cli` can use
|
|
112
|
+
them. The CLI and the webapp are the supported interfaces; using those crates as
|
|
113
|
+
libraries in another project is not supported.
|
|
84
114
|
|
|
85
115
|
### First public release
|
|
86
116
|
|
|
@@ -101,17 +131,23 @@ debugging, and review. I make the engineering decisions and review and test
|
|
|
101
131
|
the resulting work myself; the goal is high-quality, dependable software, but
|
|
102
132
|
AI-assisted code may still need extra scrutiny.
|
|
103
133
|
|
|
134
|
+
### Translations
|
|
135
|
+
|
|
136
|
+
Localized translations are early and may be entirely wrong in places. Manual
|
|
137
|
+
edits and corrections are welcome.
|
|
138
|
+
|
|
104
139
|
## Install
|
|
105
140
|
|
|
106
141
|
### Webapp
|
|
107
142
|
|
|
108
|
-
Open the hosted webapp at **[rom-weaver.com](https://rom-weaver.com/)**.
|
|
109
|
-
|
|
110
|
-
more patches, review the detected formats and checksums, then run
|
|
111
|
-
and save the result. Use **Create** to generate a distributable
|
|
112
|
-
an original and a modified file. Your files are processed locally
|
|
113
|
-
leave the device. Install it as a PWA from the browser menu to use it
|
|
114
|
-
|
|
143
|
+
Open the hosted webapp at **[rom-weaver.com/weave](https://rom-weaver.com/weave)**. You
|
|
144
|
+
do not need to install anything or create an account. Choose **Weave**, add a
|
|
145
|
+
ROM and one or more patches, review the detected formats and checksums, then run
|
|
146
|
+
the workflow and save the result. Use **Create** to generate a distributable
|
|
147
|
+
patch from an original and a modified file. Your files are processed locally
|
|
148
|
+
and never leave the device. Install it as a PWA from the browser menu to use it
|
|
149
|
+
offline.
|
|
150
|
+
New here? [Try the sample weave](https://rom-weaver.com/weave?bundle=first-weave.zip)
|
|
115
151
|
with tiny synthetic files.
|
|
116
152
|
|
|
117
153
|
<a name="self-host-the-webapp"></a>
|
|
@@ -119,8 +155,9 @@ with tiny synthetic files.
|
|
|
119
155
|
<details>
|
|
120
156
|
<summary>Self-host the webapp</summary>
|
|
121
157
|
|
|
122
|
-
The Docker source build serves the full webapp
|
|
123
|
-
isolation headers,
|
|
158
|
+
The Docker source build serves the full webapp: it builds the WASM module, adds
|
|
159
|
+
cross-origin isolation headers, supports client-side routes, and precompresses
|
|
160
|
+
assets. The
|
|
124
161
|
[self-hosting guide](docs/self-hosting.md) covers reverse proxies, subpath
|
|
125
162
|
routing, HTTPS certificates, service-worker scope, and the required COOP/COEP
|
|
126
163
|
headers.
|
|
@@ -128,7 +165,7 @@ headers.
|
|
|
128
165
|
Build and start it with Docker Compose:
|
|
129
166
|
|
|
130
167
|
```bash
|
|
131
|
-
git clone https://github.com/
|
|
168
|
+
git clone https://github.com/rom-weaver/rom-weaver.git
|
|
132
169
|
cd rom-weaver
|
|
133
170
|
docker compose up --build --detach
|
|
134
171
|
curl --fail --silent --show-error http://localhost:8080/health
|
|
@@ -152,7 +189,7 @@ arm64, and i686 musl; and Windows arm64, x86-64, and x86.
|
|
|
152
189
|
<summary>Homebrew (macOS arm64/Intel, Linux arm64/x86-64)</summary>
|
|
153
190
|
|
|
154
191
|
```bash
|
|
155
|
-
brew install
|
|
192
|
+
brew install rom-weaver/tap/rom-weaver
|
|
156
193
|
```
|
|
157
194
|
|
|
158
195
|
</details>
|
|
@@ -161,7 +198,7 @@ brew install brandonocasey/tap/rom-weaver
|
|
|
161
198
|
<summary>Scoop (Windows)</summary>
|
|
162
199
|
|
|
163
200
|
```powershell
|
|
164
|
-
scoop bucket add
|
|
201
|
+
scoop bucket add rom-weaver https://github.com/rom-weaver/scoop-bucket
|
|
165
202
|
scoop install rom-weaver
|
|
166
203
|
```
|
|
167
204
|
|
|
@@ -175,7 +212,7 @@ Override with `ROM_WEAVER_INSTALL_DIR` or pin with `ROM_WEAVER_VERSION`.
|
|
|
175
212
|
|
|
176
213
|
```bash
|
|
177
214
|
curl --proto '=https' --tlsv1.2 -LsSf \
|
|
178
|
-
https://raw.githubusercontent.com/
|
|
215
|
+
https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.sh | sh
|
|
179
216
|
```
|
|
180
217
|
|
|
181
218
|
</details>
|
|
@@ -186,7 +223,7 @@ curl --proto '=https' --tlsv1.2 -LsSf \
|
|
|
186
223
|
The same thing for PowerShell, installing to `%LOCALAPPDATA%\rom-weaver\bin`.
|
|
187
224
|
|
|
188
225
|
```powershell
|
|
189
|
-
irm https://raw.githubusercontent.com/
|
|
226
|
+
irm https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.ps1 | iex
|
|
190
227
|
```
|
|
191
228
|
|
|
192
229
|
</details>
|
|
@@ -228,13 +265,14 @@ cargo binstall rom-weaver-cli
|
|
|
228
265
|
<details>
|
|
229
266
|
<summary>mise</summary>
|
|
230
267
|
|
|
231
|
-
Useful when you want the CLI managed per project in `mise.toml`.
|
|
268
|
+
Useful when you want the CLI managed per project in `mise.toml`.
|
|
269
|
+
[Install mise](https://mise.jdx.dev/installing-mise.html) first; it verifies
|
|
232
270
|
the release's GitHub artifact attestations on install. The
|
|
233
271
|
`minimum_release_age=0s` option lets new releases resolve immediately on release
|
|
234
272
|
day; omit it if you prefer mise's default release-age delay.
|
|
235
273
|
|
|
236
274
|
```bash
|
|
237
|
-
mise use 'github:
|
|
275
|
+
mise use 'github:rom-weaver/rom-weaver[minimum_release_age=0s]'
|
|
238
276
|
```
|
|
239
277
|
|
|
240
278
|
</details>
|
|
@@ -265,7 +303,7 @@ See [Run in Docker](docs/cli.md#run-in-docker).
|
|
|
265
303
|
<summary>Build from source</summary>
|
|
266
304
|
|
|
267
305
|
```bash
|
|
268
|
-
git clone https://github.com/
|
|
306
|
+
git clone https://github.com/rom-weaver/rom-weaver.git
|
|
269
307
|
cd rom-weaver
|
|
270
308
|
cargo install --path crates/rom-weaver-cli --locked
|
|
271
309
|
rom-weaver --help
|
|
@@ -295,7 +333,7 @@ webapp builds, and tests.
|
|
|
295
333
|
</thead>
|
|
296
334
|
<tbody>
|
|
297
335
|
<tr>
|
|
298
|
-
<td>Desktop
|
|
336
|
+
<td>Desktop: Apply patches (Weave)</td>
|
|
299
337
|
<td>
|
|
300
338
|
<picture>
|
|
301
339
|
<source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/weave-desktop-dark.png">
|
|
@@ -304,7 +342,7 @@ webapp builds, and tests.
|
|
|
304
342
|
</td>
|
|
305
343
|
</tr>
|
|
306
344
|
<tr>
|
|
307
|
-
<td>Desktop
|
|
345
|
+
<td>Desktop: Create a patch</td>
|
|
308
346
|
<td>
|
|
309
347
|
<picture>
|
|
310
348
|
<source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/create-desktop-dark.png">
|
|
@@ -313,7 +351,7 @@ webapp builds, and tests.
|
|
|
313
351
|
</td>
|
|
314
352
|
</tr>
|
|
315
353
|
<tr>
|
|
316
|
-
<td>Mobile
|
|
354
|
+
<td>Mobile: Apply patches (Weave)</td>
|
|
317
355
|
<td align="center">
|
|
318
356
|
<picture>
|
|
319
357
|
<source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/weave-mobile-dark.png">
|
|
@@ -322,7 +360,7 @@ webapp builds, and tests.
|
|
|
322
360
|
</td>
|
|
323
361
|
</tr>
|
|
324
362
|
<tr>
|
|
325
|
-
<td>Mobile
|
|
363
|
+
<td>Mobile: Create a patch</td>
|
|
326
364
|
<td align="center">
|
|
327
365
|
<picture>
|
|
328
366
|
<source media="(prefers-color-scheme: dark)" srcset="packages/rom-weaver-webapp/design/create-mobile-dark.png">
|
|
@@ -341,18 +379,27 @@ integration, development, architecture, and format-reference guides.
|
|
|
341
379
|
## Contributing and support
|
|
342
380
|
|
|
343
381
|
Bug reports and contributions are welcome. Read the
|
|
344
|
-
[contribution guide](
|
|
345
|
-
before submitting a change, and
|
|
382
|
+
[contribution guide](CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md)
|
|
383
|
+
before submitting a change. Because rom-weaver is dual-licensed, code and
|
|
384
|
+
documentation changes need a one-time signature on the
|
|
385
|
+
[Contributor License Agreement](CLA.md) - the `CLA Signed` check asks for
|
|
386
|
+
it on your first pull request, it covers every repository in the
|
|
387
|
+
[`rom-weaver` organization](https://github.com/rom-weaver), and you keep the
|
|
388
|
+
copyright in your work. Report
|
|
346
389
|
suspected vulnerabilities through GitHub's private reporting form in the
|
|
347
390
|
[security policy](.github/SECURITY.md). If rom-weaver has been useful to you, you can
|
|
348
|
-
support continued development
|
|
391
|
+
support continued development through
|
|
392
|
+
[GitHub Sponsors](https://github.com/sponsors/brandonocasey) or
|
|
393
|
+
[Ko-fi](https://ko-fi.com/brandonocasey).
|
|
349
394
|
|
|
350
395
|
## License
|
|
351
396
|
|
|
352
|
-
Copyright (C) Brandon Casey
|
|
397
|
+
Copyright (C) Brandon Casey and rom-weaver contributors
|
|
353
398
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
and
|
|
399
|
+
The public distribution is licensed under
|
|
400
|
+
[AGPL-3.0-or-later](LICENSE). [Commercial licensing](COMMERCIAL_LICENSE.md) is
|
|
401
|
+
also available for first-party rom-weaver code. Bundled third-party components
|
|
402
|
+
retain their own licenses. Release builds include a generated
|
|
403
|
+
[attribution and license inventory](https://rom-weaver.com/NOTICE) and
|
|
404
|
+
corresponding license texts. Those third-party terms continue to apply under
|
|
405
|
+
every rom-weaver licensing option.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rom-weaver/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"author": "Brandon Casey",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"description": "Local-first toolkit for ROMs and disc images: inspect, extract, compress, and apply, create, or bundle patches. Offline via a browser service-worker PWA or CLI.",
|
|
@@ -17,10 +17,13 @@
|
|
|
17
17
|
"cli"
|
|
18
18
|
],
|
|
19
19
|
"homepage": "https://rom-weaver.com",
|
|
20
|
-
"funding":
|
|
20
|
+
"funding": [
|
|
21
|
+
"https://github.com/sponsors/brandonocasey",
|
|
22
|
+
"https://ko-fi.com/brandonocasey"
|
|
23
|
+
],
|
|
21
24
|
"repository": {
|
|
22
25
|
"type": "git",
|
|
23
|
-
"url": "https://github.com/
|
|
26
|
+
"url": "https://github.com/rom-weaver/rom-weaver.git"
|
|
24
27
|
},
|
|
25
28
|
"type": "module",
|
|
26
29
|
"bin": {
|
|
@@ -50,7 +53,7 @@
|
|
|
50
53
|
"files": [
|
|
51
54
|
"bin/rom-weaver.mjs",
|
|
52
55
|
"docs/man/*.1",
|
|
53
|
-
"LICENSE
|
|
56
|
+
"LICENSE"
|
|
54
57
|
],
|
|
55
58
|
"publishConfig": {
|
|
56
59
|
"access": "public",
|
|
@@ -60,21 +63,21 @@
|
|
|
60
63
|
"node": ">=22"
|
|
61
64
|
},
|
|
62
65
|
"optionalDependencies": {
|
|
63
|
-
"@rom-weaver/darwin-arm64": "0.
|
|
64
|
-
"@rom-weaver/darwin-x64": "0.
|
|
65
|
-
"@rom-weaver/linux-arm64-musl": "0.
|
|
66
|
-
"@rom-weaver/linux-ia32-musl": "0.
|
|
67
|
-
"@rom-weaver/linux-x64-gnu": "0.
|
|
68
|
-
"@rom-weaver/linux-x64-musl": "0.
|
|
69
|
-
"@rom-weaver/win32-arm64-msvc": "0.
|
|
70
|
-
"@rom-weaver/win32-ia32-msvc": "0.
|
|
71
|
-
"@rom-weaver/win32-x64-msvc": "0.
|
|
66
|
+
"@rom-weaver/darwin-arm64": "0.9.0",
|
|
67
|
+
"@rom-weaver/darwin-x64": "0.9.0",
|
|
68
|
+
"@rom-weaver/linux-arm64-musl": "0.9.0",
|
|
69
|
+
"@rom-weaver/linux-ia32-musl": "0.9.0",
|
|
70
|
+
"@rom-weaver/linux-x64-gnu": "0.9.0",
|
|
71
|
+
"@rom-weaver/linux-x64-musl": "0.9.0",
|
|
72
|
+
"@rom-weaver/win32-arm64-msvc": "0.9.0",
|
|
73
|
+
"@rom-weaver/win32-ia32-msvc": "0.9.0",
|
|
74
|
+
"@rom-weaver/win32-x64-msvc": "0.9.0"
|
|
72
75
|
},
|
|
73
76
|
"scripts": {
|
|
74
|
-
"docs:toc": "
|
|
77
|
+
"docs:toc": "node scripts/update-markdown-toc.mjs",
|
|
75
78
|
"dev": "mise run dev",
|
|
76
79
|
"preview": "mise run preview",
|
|
77
|
-
"hooks:install": "lefthook
|
|
80
|
+
"hooks:install": "node scripts/lefthook-install.mjs",
|
|
78
81
|
"hooks:run": "lefthook run pre-commit --force",
|
|
79
82
|
"hooks:validate": "lefthook validate",
|
|
80
83
|
"prepack": "mise run manpages",
|