filedist 0.29.0 → 0.31.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/README.md +22 -4
- package/dist/cli/actions/check.d.ts.map +1 -1
- package/dist/cli/actions/check.js +1 -0
- package/dist/cli/actions/check.js.map +1 -1
- package/dist/cli/argv.d.ts +3 -1
- package/dist/cli/argv.d.ts.map +1 -1
- package/dist/cli/argv.js +7 -6
- package/dist/cli/argv.js.map +1 -1
- package/dist/cli/usage.d.ts.map +1 -1
- package/dist/cli/usage.js +4 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/fileset/check.d.ts +10 -7
- package/dist/fileset/check.d.ts.map +1 -1
- package/dist/fileset/check.js +24 -30
- package/dist/fileset/check.js.map +1 -1
- package/dist/fileset/diff.js +3 -3
- package/dist/fileset/diff.js.map +1 -1
- package/dist/fileset/execute.d.ts.map +1 -1
- package/dist/fileset/execute.js +12 -7
- package/dist/fileset/execute.js.map +1 -1
- package/dist/fileset/markers.d.ts +10 -2
- package/dist/fileset/markers.d.ts.map +1 -1
- package/dist/fileset/markers.js +37 -6
- package/dist/fileset/markers.js.map +1 -1
- package/dist/package/action-check.d.ts +6 -0
- package/dist/package/action-check.d.ts.map +1 -1
- package/dist/package/action-check.js +37 -5
- package/dist/package/action-check.js.map +1 -1
- package/dist/package/action-extract.d.ts.map +1 -1
- package/dist/package/action-extract.js +33 -20
- package/dist/package/action-extract.js.map +1 -1
- package/dist/package/calculate-diff.d.ts +1 -1
- package/dist/package/calculate-diff.d.ts.map +1 -1
- package/dist/package/calculate-diff.js +51 -21
- package/dist/package/calculate-diff.js.map +1 -1
- package/dist/package/config-merge.d.ts +1 -1
- package/dist/package/config-merge.js +2 -2
- package/dist/package/config-merge.js.map +1 -1
- package/dist/package/resolve-files.js +1 -1
- package/dist/package/resolve-files.js.map +1 -1
- package/dist/package/source.js +1 -1
- package/dist/package/source.js.map +1 -1
- package/dist/types.d.ts +19 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +9 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -308,7 +308,7 @@ Each entry in the `filedist.sets` array in `package.json` supports the following
|
|
|
308
308
|
| `selector.exclude` | `string[]` | `["package.json","bin/**","README.md","node_modules/**"]` (when `files` is unset), none otherwise | Glob patterns to exclude files even when they match `selector.files` (e.g. `["test/**", "**/*.test.*"]`). |
|
|
309
309
|
| `selector.contentRegexes` | `string[]` | none | Regex patterns (as strings) to filter files by content. Only files matching at least one pattern are extracted. |
|
|
310
310
|
| `output.force` | `boolean` | `false` | Allow overwriting existing files or files owned by a different package. |
|
|
311
|
-
| `output.
|
|
311
|
+
| `output.mutable` | `boolean` | `false` | Skip files that already exist; mark extracted files as mutable (check ignores content changes). Cannot be combined with `force`. |
|
|
312
312
|
| `output.noSync` | `boolean` | `false` | Keep stale managed files on disk during extract instead of deleting them. `check` still reports them as extra drift until they are removed or synced. |
|
|
313
313
|
| `output.gitignore` | `boolean` | `true` | Create/update a `.gitignore` file alongside each `.filedist` marker file. Set to `false` to disable. |
|
|
314
314
|
| `output.managed` | `boolean` | `true` | Write files with a `.filedist` marker, `.gitignore` update, and read-only flag. Set to `false` to skip tracking. Existing files are skipped when set to `false`. |
|
|
@@ -407,6 +407,24 @@ The check command reports differences per package:
|
|
|
407
407
|
+ extra: data/old-file.json
|
|
408
408
|
```
|
|
409
409
|
|
|
410
|
+
#### Offline / local-only check
|
|
411
|
+
|
|
412
|
+
By default `check` installs packages (or uses an already-installed version) to detect *extra* files — files that exist in the package source but were never extracted. If you want a fast, fully offline check that skips all network and install steps, use `--local-only`:
|
|
413
|
+
|
|
414
|
+
```sh
|
|
415
|
+
npx filedist check --local-only
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
In this mode filedist reads the `.filedist` marker file for each output directory and verifies:
|
|
419
|
+
|
|
420
|
+
1. **File checksums** — every non-mutable file listed in the marker is hashed and compared against the checksum recorded at extraction time.
|
|
421
|
+
|
|
422
|
+
Extra-file detection (files in the source that were never extracted) is skipped because no package source is available. Use `--local-only` when:
|
|
423
|
+
|
|
424
|
+
- Running in a **CI environment** where the package registry is unavailable or you want to avoid install latency.
|
|
425
|
+
- Checking **air-gapped** or **offline** environments.
|
|
426
|
+
- You only care that previously extracted files have not been **locally tampered with**, and are not concerned about new files added to the upstream package since the last extract.
|
|
427
|
+
|
|
410
428
|
### 4. List managed files
|
|
411
429
|
|
|
412
430
|
```sh
|
|
@@ -472,7 +490,7 @@ When `extract` recurses, the caller's `output` flags are inherited by every tran
|
|
|
472
490
|
|---|---|
|
|
473
491
|
| `force: true` | Transitive entries also overwrite unmanaged / foreign files |
|
|
474
492
|
| `dryRun: true` | No files are written anywhere in the hierarchy |
|
|
475
|
-
| `
|
|
493
|
+
| `mutable: true` | Existing files are skipped at every level; extracted files are marked as mutable |
|
|
476
494
|
| `gitignore: false` | No `.gitignore` entries are created anywhere |
|
|
477
495
|
| `managed: false` | All transitive files are written without a marker or read-only flag |
|
|
478
496
|
| `symlinks` / `contentReplacements` | Appended to each transitive entry's own lists |
|
|
@@ -539,8 +557,8 @@ Extract options:
|
|
|
539
557
|
"my-pkg@^1.0.0,git:github.com/org/repo.git@main"
|
|
540
558
|
--output, -o <dir> Output directory (default: current directory)
|
|
541
559
|
--force Overwrite existing files or files owned by a different package
|
|
542
|
-
--
|
|
543
|
-
combined with --force
|
|
560
|
+
--mutable Skip files that already exist; mark extracted files as mutable (check ignores
|
|
561
|
+
content changes). Cannot be combined with --force
|
|
544
562
|
--gitignore [bool] Disable .gitignore management when set to false (enabled by default)
|
|
545
563
|
--managed [bool] Set to false to write files without a .filedist marker, .gitignore
|
|
546
564
|
update, or read-only flag. Existing files are skipped. Files can be
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/actions/check.ts"],"names":[],"mappings":";;AASA,
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/actions/check.ts"],"names":[],"mappings":";;AASA,4BA+BC;AAtCD,kCAAqE;AACrE,oCAAsC;AACtC,6DAAyD;AAEzD;;GAEG;AACI,KAAK,UAAU,QAAQ,CAC5B,MAA6B,EAC7B,IAAc,EACd,GAAW;IAEX,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAA,kBAAU,EAAC,OAAO,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAA,sCAA+B,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAW,EAAC;QAChC,OAAO;QACP,GAAG;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IAEH,MAAM,QAAQ,GACZ,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAExF,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
package/dist/cli/argv.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export type ParsedArgv = {
|
|
|
17
17
|
presets?: string[];
|
|
18
18
|
configFile?: string;
|
|
19
19
|
force?: boolean;
|
|
20
|
-
|
|
20
|
+
mutable?: boolean;
|
|
21
21
|
/** --nosync / --nosync=true|false */
|
|
22
22
|
nosync?: boolean;
|
|
23
23
|
/** --gitignore / --gitignore=true|false */
|
|
@@ -30,6 +30,8 @@ export type ParsedArgv = {
|
|
|
30
30
|
verbose?: boolean;
|
|
31
31
|
/** --no-save: skip saving config to .filedistrc.yml */
|
|
32
32
|
ignoreConfig?: boolean;
|
|
33
|
+
/** --local-only: skip package installs/git clones; verify only against .filedist markers */
|
|
34
|
+
localOnly?: boolean;
|
|
33
35
|
};
|
|
34
36
|
export declare function resolveEffectivePresets(parsed: ParsedArgv, config?: FiledistCliConfig | null): string[];
|
|
35
37
|
/**
|
package/dist/cli/argv.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../../src/cli/argv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAgC,MAAM,UAAU,CAAC;AAG9F,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../../src/cli/argv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAgC,MAAM,UAAU,CAAC;AAG9F,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iEAAiE;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAChC,MAAM,EAAE,CAMV;AA0BD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAmEpD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,MAAM,EAAyB,GACvC,oBAAoB,EAAE,GAAG,IAAI,CAoB/B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,EAAE,EAC/B,MAAM,EAAE,UAAU,GACjB,oBAAoB,EAAE,CA8BxB;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,GACb,oBAAoB,EAAE,CAexB"}
|
package/dist/cli/argv.js
CHANGED
|
@@ -30,7 +30,7 @@ function buildOutputFromArgv(parsed) {
|
|
|
30
30
|
return {
|
|
31
31
|
...(parsed.output !== undefined ? { path: parsed.output } : {}),
|
|
32
32
|
...(parsed.force !== undefined ? { force: parsed.force } : {}),
|
|
33
|
-
...(parsed.
|
|
33
|
+
...(parsed.mutable !== undefined ? { mutable: parsed.mutable } : {}),
|
|
34
34
|
...(parsed.nosync !== undefined ? { noSync: parsed.nosync } : {}),
|
|
35
35
|
...(parsed.gitignore !== undefined ? { gitignore: parsed.gitignore } : {}),
|
|
36
36
|
...(parsed.managed !== undefined ? { managed: parsed.managed } : {}),
|
|
@@ -71,9 +71,9 @@ function parseArgv(argv) {
|
|
|
71
71
|
.filter(Boolean);
|
|
72
72
|
};
|
|
73
73
|
const force = getBoolFlag('--force');
|
|
74
|
-
const
|
|
75
|
-
if (force === true &&
|
|
76
|
-
throw new Error('--force and --
|
|
74
|
+
const mutable = getBoolFlag('--mutable');
|
|
75
|
+
if (force === true && mutable === true) {
|
|
76
|
+
throw new Error('--force and --mutable are mutually exclusive');
|
|
77
77
|
}
|
|
78
78
|
const packages = getCommaSplit('--packages');
|
|
79
79
|
const all = getBoolFlag('--all');
|
|
@@ -92,7 +92,7 @@ function parseArgv(argv) {
|
|
|
92
92
|
presets,
|
|
93
93
|
configFile: getValue('--config'),
|
|
94
94
|
force,
|
|
95
|
-
|
|
95
|
+
mutable,
|
|
96
96
|
nosync: getBoolFlag('--nosync'),
|
|
97
97
|
gitignore: getBoolFlag('--gitignore'),
|
|
98
98
|
managed: getBoolFlag('--managed'),
|
|
@@ -101,6 +101,7 @@ function parseArgv(argv) {
|
|
|
101
101
|
silent: getBoolFlag('--silent'),
|
|
102
102
|
verbose: argv.includes('-v') ? true : verboseFlag,
|
|
103
103
|
ignoreConfig: getBoolFlag('--no-save'),
|
|
104
|
+
localOnly: getBoolFlag('--local-only'),
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
/**
|
|
@@ -136,7 +137,7 @@ function applyArgvOverrides(entries, parsed) {
|
|
|
136
137
|
...entry.output,
|
|
137
138
|
...(parsed.output !== undefined ? { path: parsed.output } : {}),
|
|
138
139
|
...(parsed.force !== undefined ? { force: parsed.force } : {}),
|
|
139
|
-
...(parsed.
|
|
140
|
+
...(parsed.mutable !== undefined ? { mutable: parsed.mutable } : {}),
|
|
140
141
|
...(parsed.nosync !== undefined ? { noSync: parsed.nosync } : {}),
|
|
141
142
|
...(parsed.gitignore !== undefined ? { gitignore: parsed.gitignore } : {}),
|
|
142
143
|
...(parsed.managed !== undefined ? { managed: parsed.managed } : {}),
|
package/dist/cli/argv.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../src/cli/argv.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"argv.js","sourceRoot":"","sources":["../../src/cli/argv.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAmJjD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC"}
|
package/dist/cli/usage.js
CHANGED
|
@@ -24,7 +24,7 @@ Options:
|
|
|
24
24
|
--files <globs> Comma-separated glob patterns for file selection.
|
|
25
25
|
--content-regex <re> Comma-separated regex strings for content filtering.
|
|
26
26
|
--force Overwrite existing unmanaged files.
|
|
27
|
-
--
|
|
27
|
+
--mutable Skip files that already exist; mark extracted files as mutable (check ignores content changes).
|
|
28
28
|
--nosync [bool] Keep stale managed files on disk during extract (default: false).
|
|
29
29
|
--gitignore [bool] Enable/disable .gitignore update (default: true). Use --gitignore=false to disable.
|
|
30
30
|
--managed [bool] Enable/disable managed mode (default: true). Use --managed=false to write without .filedist marker.
|
|
@@ -53,6 +53,9 @@ Options:
|
|
|
53
53
|
--files <globs> Glob patterns for file selection.
|
|
54
54
|
--content-regex <re> Regex strings for content filtering.
|
|
55
55
|
--managed [bool] Silently skip unmanaged entries. Use --managed=false.
|
|
56
|
+
--local-only Skip all package installs/git clones. Verify only against
|
|
57
|
+
.filedist marker checksums (including marker self-integrity check).
|
|
58
|
+
Extra-file detection is skipped. Useful for offline/CI environments.
|
|
56
59
|
--presets <tags> Comma-separated preset tags; only matching entries are checked. Overrides config defaultPresets.
|
|
57
60
|
--all Ignore config defaultPresets and check all configured entries.
|
|
58
61
|
--config <file> Path to a config file (overrides auto-discovered .filedistrc / package.json).
|
package/dist/cli/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":";AAAA,+BAA+B;;AAQ/B,
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":";AAAA,+BAA+B;;AAQ/B,gCAmJC;AAED,oCAGC;AA9JD,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;;GAGG;AACH,SAAgB,UAAU,CAAC,OAAgB;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjB,CAAC,CAAC;YACG,MAAM;QAER,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBjB,CAAC,CAAC;YACG,MAAM;QAER,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAajB,CAAC,CAAC;YACG,MAAM;QAER,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiBjB,CAAC,CAAC;YACG,MAAM;QAER,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYjB,CAAC,CAAC;YACG,MAAM;QAER,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;CAajB,CAAC,CAAC;YACG,MAAM;QAER;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;WAYP,OAAO;CACjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,SAAgB,YAAY;IAC1B,wCAAwC;IACxC,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC"}
|
package/dist/fileset/check.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { SelectorConfig,
|
|
1
|
+
import { SelectorConfig, ManagedFileMetadata, CheckResult } from '../types';
|
|
2
2
|
/**
|
|
3
|
-
* Check whether locally extracted files are in sync with their
|
|
4
|
-
* Reuses diff logic to classify files as missing, modified, or extra.
|
|
5
|
-
* Applies contentReplacements before hash comparison.
|
|
3
|
+
* Check whether locally extracted files are in sync with their source.
|
|
6
4
|
*
|
|
7
|
-
*
|
|
5
|
+
* Uses the checksum stored in each .filedist marker entry to verify file integrity
|
|
6
|
+
* without requiring access to the original source package.
|
|
7
|
+
* Mutable marker entries (extracted with mutable option) are excluded from the check.
|
|
8
|
+
* Entries without a stored checksum are reported as modified (re-extract to repair).
|
|
9
|
+
*
|
|
10
|
+
* @param pkgPath Absolute path to the installed package directory, or null.
|
|
11
|
+
* Used only for extra-file detection; not for content comparison.
|
|
8
12
|
* @param outputDir Absolute path to the output directory.
|
|
9
13
|
* @param selector SelectorConfig controlling which package files are in scope.
|
|
10
|
-
* @param outputConfig OutputConfig (used for contentReplacements).
|
|
11
14
|
* @param marker Managed file entries from the .filedist marker.
|
|
12
15
|
* @returns CheckResult with missing, modified, and extra arrays.
|
|
13
16
|
*/
|
|
14
|
-
export declare function checkFileset(pkgPath: string | null, outputDir: string,
|
|
17
|
+
export declare function checkFileset(pkgPath: string | null, outputDir: string, marker: ManagedFileMetadata[], selector?: SelectorConfig): Promise<CheckResult>;
|
|
15
18
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/fileset/check.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/fileset/check.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,mBAAmB,EAAE,EAC7B,QAAQ,GAAE,cAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAyCtB"}
|
package/dist/fileset/check.js
CHANGED
|
@@ -7,34 +7,24 @@ exports.checkFileset = checkFileset;
|
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
9
|
const utils_1 = require("../utils");
|
|
10
|
-
const content_replacements_1 = require("../package/content-replacements");
|
|
11
10
|
const package_files_1 = require("./package-files");
|
|
12
11
|
/**
|
|
13
|
-
* Check whether locally extracted files are in sync with their
|
|
14
|
-
* Reuses diff logic to classify files as missing, modified, or extra.
|
|
15
|
-
* Applies contentReplacements before hash comparison.
|
|
12
|
+
* Check whether locally extracted files are in sync with their source.
|
|
16
13
|
*
|
|
17
|
-
*
|
|
14
|
+
* Uses the checksum stored in each .filedist marker entry to verify file integrity
|
|
15
|
+
* without requiring access to the original source package.
|
|
16
|
+
* Mutable marker entries (extracted with mutable option) are excluded from the check.
|
|
17
|
+
* Entries without a stored checksum are reported as modified (re-extract to repair).
|
|
18
|
+
*
|
|
19
|
+
* @param pkgPath Absolute path to the installed package directory, or null.
|
|
20
|
+
* Used only for extra-file detection; not for content comparison.
|
|
18
21
|
* @param outputDir Absolute path to the output directory.
|
|
19
22
|
* @param selector SelectorConfig controlling which package files are in scope.
|
|
20
|
-
* @param outputConfig OutputConfig (used for contentReplacements).
|
|
21
23
|
* @param marker Managed file entries from the .filedist marker.
|
|
22
24
|
* @returns CheckResult with missing, modified, and extra arrays.
|
|
23
25
|
*/
|
|
24
|
-
async function checkFileset(pkgPath, outputDir,
|
|
25
|
-
const contentReplacements = outputConfig.contentReplacements ?? [];
|
|
26
|
-
if (!pkgPath) {
|
|
27
|
-
// Package not installed
|
|
28
|
-
return {
|
|
29
|
-
missing: marker.map((m) => m.path),
|
|
30
|
-
modified: [],
|
|
31
|
-
extra: [],
|
|
32
|
-
};
|
|
33
|
-
}
|
|
26
|
+
async function checkFileset(pkgPath, outputDir, marker, selector = {}) {
|
|
34
27
|
const managedByPath = new Map(marker.map((m) => [m.path, m]));
|
|
35
|
-
// Enumerate files from package (in scope)
|
|
36
|
-
const pkgFiles = await (0, package_files_1.enumeratePackageFiles)(pkgPath, selector);
|
|
37
|
-
const pkgFileSet = new Set(pkgFiles);
|
|
38
28
|
const result = { missing: [], modified: [], extra: [] };
|
|
39
29
|
// Check each managed file
|
|
40
30
|
for (const m of marker) {
|
|
@@ -43,22 +33,26 @@ async function checkFileset(pkgPath, outputDir, selector, outputConfig, marker)
|
|
|
43
33
|
result.missing.push(m.path);
|
|
44
34
|
continue;
|
|
45
35
|
}
|
|
46
|
-
//
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
if (srcHash !== destHash) {
|
|
36
|
+
// Mutable files are allowed to change locally; skip content check
|
|
37
|
+
if (m.mutable)
|
|
38
|
+
continue;
|
|
39
|
+
if (m.checksum) {
|
|
40
|
+
// Compare local file against stored checksum (no source needed)
|
|
41
|
+
const destHash = (0, utils_1.shortenChecksum)(await (0, utils_1.hashFile)(destPath));
|
|
42
|
+
if (m.checksum !== destHash) {
|
|
54
43
|
result.modified.push(m.path);
|
|
55
44
|
}
|
|
56
45
|
}
|
|
46
|
+
else {
|
|
47
|
+
// No stored checksum: marker is from an old extraction; re-extract to repair
|
|
48
|
+
result.modified.push(m.path);
|
|
49
|
+
}
|
|
57
50
|
}
|
|
58
51
|
// Find extra files: in filtered package source but never extracted (not in marker).
|
|
59
|
-
// Only perform this check when the marker is non-empty
|
|
60
|
-
// extraction has taken place or everything was purged
|
|
61
|
-
if (marker.length > 0) {
|
|
52
|
+
// Only perform this check when the marker is non-empty and package is available;
|
|
53
|
+
// an empty marker means no extraction has taken place or everything was purged.
|
|
54
|
+
if (pkgPath && marker.length > 0) {
|
|
55
|
+
const pkgFiles = await (0, package_files_1.enumeratePackageFiles)(pkgPath, selector);
|
|
62
56
|
for (const relPath of pkgFiles) {
|
|
63
57
|
if (!managedByPath.has(relPath)) {
|
|
64
58
|
result.extra.push(relPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/fileset/check.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/fileset/check.ts"],"names":[],"mappings":";;;;;AAuBA,oCA8CC;AArED,0DAA6B;AAC7B,sDAAyB;AAGzB,oCAAqD;AAErD,mDAAwD;AAExD;;;;;;;;;;;;;;GAcG;AACI,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,SAAiB,EACjB,MAA6B,EAC7B,WAA2B,EAAE;IAE7B,MAAM,aAAa,GAAG,IAAI,GAAG,CAA8B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3F,MAAM,MAAM,GAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAErE,0BAA0B;IAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,CAAC,OAAO;YAAE,SAAS;QAExB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACf,gEAAgE;YAChE,MAAM,QAAQ,GAAG,IAAA,uBAAe,EAAC,MAAM,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,iFAAiF;IACjF,gFAAgF;IAChF,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAA,qCAAqB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/fileset/diff.js
CHANGED
|
@@ -52,8 +52,8 @@ async function diff(pkgPath, outputDir, selector, outputConfig, existingMarker,
|
|
|
52
52
|
}
|
|
53
53
|
continue;
|
|
54
54
|
}
|
|
55
|
-
if (outputConfig.
|
|
56
|
-
result.toSkip.push({ relPath, reason: '
|
|
55
|
+
if (outputConfig.mutable && destExists) {
|
|
56
|
+
result.toSkip.push({ relPath, reason: 'mutable' });
|
|
57
57
|
continue;
|
|
58
58
|
}
|
|
59
59
|
if (!destExists) {
|
|
@@ -78,7 +78,7 @@ async function diff(pkgPath, outputDir, selector, outputConfig, existingMarker,
|
|
|
78
78
|
const srcHash = await hashSrcWithReplacements(srcPath, contentReplacements);
|
|
79
79
|
const destHash = await (0, utils_1.hashFile)(destPath);
|
|
80
80
|
if (srcHash === destHash) {
|
|
81
|
-
result.toSkip.push({ relPath, reason: '
|
|
81
|
+
result.toSkip.push({ relPath, reason: 'unchanged' });
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
84
|
result.toModify.push({ relPath, sourcePath: srcPath, destPath, hash: srcHash });
|
package/dist/fileset/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/fileset/diff.ts"],"names":[],"mappings":";;;;;AA6BA,oBA2FC;AAxHD,sDAAyB;AACzB,0DAA6B;AAC7B,8DAAiC;AASjC,oCAAkD;AAClD,0EAAmF;AAEnF,mDAAwD;AAExD;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,IAAI,CACxB,OAAe,EACf,SAAiB,EACjB,QAAwB,EACxB,YAA0B,EAC1B,cAAqC,EACrC,mBAA+C;IAE/C,MAAM,MAAM,GAAkB;QAC5B,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,6DAA6D;IAC7D,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACvC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,MAAM,IAAA,qCAAqB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,YAAY,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YACnC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,gEAAgE;gBAEhE,MAAM,OAAO,GAAG,MAAM,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;gBACxC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/fileset/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/fileset/execute.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAOlB;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,aAAa,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,mBAAmB,EAAE,EAErC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/fileset/execute.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAOlB;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,aAAa,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,mBAAmB,EAAE,EAErC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC,CAqHxB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
package/dist/fileset/execute.js
CHANGED
|
@@ -83,6 +83,14 @@ async function execute(map, outputDir, outputConfig, pkg, pkgVersion, existingMa
|
|
|
83
83
|
// processed and counts them independently via deferredDeletes.length.
|
|
84
84
|
// ExecuteResult.deleted is intentionally left at 0 here to avoid double-counting.
|
|
85
85
|
// result.deleted = 0; (already initialised to 0 above)
|
|
86
|
+
// Apply content replacements BEFORE computing checksums so stored hashes reflect
|
|
87
|
+
// the final on-disk content (including any in-place text substitutions).
|
|
88
|
+
if (!dryRun && outputConfig.contentReplacements && outputConfig.contentReplacements.length > 0) {
|
|
89
|
+
if (verbose) {
|
|
90
|
+
console.log(`[verbose] execute: applying ${outputConfig.contentReplacements.length} content replacement(s) in ${(0, utils_1.formatDisplayPath)(outputDir, displayBaseDir)}`);
|
|
91
|
+
}
|
|
92
|
+
await (0, content_replacements_1.applyContentReplacements)(outputDir, outputConfig.contentReplacements);
|
|
93
|
+
}
|
|
86
94
|
// Update marker and gitignore
|
|
87
95
|
if (!dryRun && !unmanaged) {
|
|
88
96
|
const marker = (0, markers_1.markerPath)(outputDir);
|
|
@@ -94,10 +102,14 @@ async function execute(map, outputDir, outputConfig, pkg, pkgVersion, existingMa
|
|
|
94
102
|
// Remove deleted paths, add/update new paths
|
|
95
103
|
const updatedEntries = existingMarker.filter((m) => !map.toDelete.includes(m.path) && !addedPaths.has(m.path));
|
|
96
104
|
for (const op of [...map.toAdd, ...map.toModify]) {
|
|
105
|
+
// Hash the final file content (after any content replacements applied above)
|
|
106
|
+
const checksum = (0, utils_1.shortenChecksum)((0, utils_1.hashFileSync)(op.destPath));
|
|
97
107
|
updatedEntries.push({
|
|
98
108
|
path: op.relPath,
|
|
99
109
|
packageName: pkg.name,
|
|
100
110
|
packageVersion: pkgVersion,
|
|
111
|
+
checksum,
|
|
112
|
+
...(outputConfig.mutable === true ? { mutable: true } : {}),
|
|
101
113
|
});
|
|
102
114
|
}
|
|
103
115
|
if (verbose) {
|
|
@@ -112,13 +124,6 @@ async function execute(map, outputDir, outputConfig, pkg, pkgVersion, existingMa
|
|
|
112
124
|
await (0, gitignore_1.addToGitignore)(outputDir, managedPaths);
|
|
113
125
|
}
|
|
114
126
|
}
|
|
115
|
-
// Apply content replacements
|
|
116
|
-
if (!dryRun && outputConfig.contentReplacements && outputConfig.contentReplacements.length > 0) {
|
|
117
|
-
if (verbose) {
|
|
118
|
-
console.log(`[verbose] execute: applying ${outputConfig.contentReplacements.length} content replacement(s) in ${(0, utils_1.formatDisplayPath)(outputDir, displayBaseDir)}`);
|
|
119
|
-
}
|
|
120
|
-
await (0, content_replacements_1.applyContentReplacements)(outputDir, outputConfig.contentReplacements);
|
|
121
|
-
}
|
|
122
127
|
return result;
|
|
123
128
|
}
|
|
124
129
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/fileset/execute.ts"],"names":[],"mappings":";;;;;AAmCA,
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/fileset/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import { ManagedFileMetadata } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Read all managed file entries from a .filedist marker file.
|
|
4
|
-
* Format: path|packageName|packageVersion
|
|
4
|
+
* Format: path|packageName|packageVersion[|kind[|checksum[|mutable]]]
|
|
5
5
|
* Pipe is used as separator so file paths containing commas are handled safely.
|
|
6
|
+
* Fields beyond the first three are optional for backward compatibility.
|
|
7
|
+
* mutable column: '1' = mutable, '0' or absent = not mutable.
|
|
8
|
+
*
|
|
9
|
+
* A trailing self-checksum row `.|<sha256hex>` covers all entry rows.
|
|
10
|
+
* When present, integrity is verified and an error is thrown on mismatch.
|
|
6
11
|
*/
|
|
7
12
|
export declare function readMarker(markerFilePath: string): Promise<ManagedFileMetadata[]>;
|
|
8
13
|
/**
|
|
9
14
|
* Write managed file entries to a .filedist marker file.
|
|
10
|
-
* Format: path|packageName|packageVersion
|
|
15
|
+
* Format: path|packageName|packageVersion|kind|checksum|mutable
|
|
16
|
+
* mutable column: '1' = mutable, '0' = not mutable.
|
|
17
|
+
* Trailing columns up to (but not including) the last meaningful one are always written.
|
|
18
|
+
* A self-checksum row `.|<sha256hex>` is appended after all entry rows.
|
|
11
19
|
* Makes the file read-only after writing.
|
|
12
20
|
*/
|
|
13
21
|
export declare function writeMarker(markerFilePath: string, entries: ManagedFileMetadata[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markers.d.ts","sourceRoot":"","sources":["../../src/fileset/markers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"markers.d.ts","sourceRoot":"","sources":["../../src/fileset/markers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAQ/C;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgCvF;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,mBAAmB,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAE3F"}
|
package/dist/fileset/markers.js
CHANGED
|
@@ -11,10 +11,17 @@ const node_fs_1 = __importDefault(require("node:fs"));
|
|
|
11
11
|
const node_path_1 = __importDefault(require("node:path"));
|
|
12
12
|
const utils_1 = require("../utils");
|
|
13
13
|
const constants_1 = require("./constants");
|
|
14
|
+
/** Special path used for the self-checksum row at the end of a marker file. */
|
|
15
|
+
const SELF_CHECKSUM_PATH = '.';
|
|
14
16
|
/**
|
|
15
17
|
* Read all managed file entries from a .filedist marker file.
|
|
16
|
-
* Format: path|packageName|packageVersion
|
|
18
|
+
* Format: path|packageName|packageVersion[|kind[|checksum[|mutable]]]
|
|
17
19
|
* Pipe is used as separator so file paths containing commas are handled safely.
|
|
20
|
+
* Fields beyond the first three are optional for backward compatibility.
|
|
21
|
+
* mutable column: '1' = mutable, '0' or absent = not mutable.
|
|
22
|
+
*
|
|
23
|
+
* A trailing self-checksum row `.|<sha256hex>` covers all entry rows.
|
|
24
|
+
* When present, integrity is verified and an error is thrown on mismatch.
|
|
18
25
|
*/
|
|
19
26
|
async function readMarker(markerFilePath) {
|
|
20
27
|
if (!node_fs_1.default.existsSync(markerFilePath)) {
|
|
@@ -22,19 +29,34 @@ async function readMarker(markerFilePath) {
|
|
|
22
29
|
}
|
|
23
30
|
const content = node_fs_1.default.readFileSync(markerFilePath, 'utf8');
|
|
24
31
|
const lines = content.split('\n').filter((line) => line.trim() !== '');
|
|
25
|
-
|
|
32
|
+
// Separate the self-checksum row (path === '.') from entry lines
|
|
33
|
+
const checksumRow = lines.find((line) => line.split('|')[0] === SELF_CHECKSUM_PATH);
|
|
34
|
+
const entryLines = lines.filter((line) => line.split('|')[0] !== SELF_CHECKSUM_PATH);
|
|
35
|
+
if (checksumRow) {
|
|
36
|
+
const storedHash = checksumRow.split('|')[1] ?? '';
|
|
37
|
+
const expectedHash = (0, utils_1.shortenChecksum)((0, utils_1.hashBuffer)(entryLines.join('\n') + '\n'));
|
|
38
|
+
if (storedHash !== expectedHash) {
|
|
39
|
+
throw new Error(`Marker integrity check failed: ${markerFilePath} may have been tampered with`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return entryLines.map((line) => {
|
|
26
43
|
const fields = line.split('|');
|
|
27
44
|
return {
|
|
28
45
|
path: fields[0] ?? '',
|
|
29
46
|
packageName: fields[1] ?? '',
|
|
30
47
|
packageVersion: fields[2] ?? '',
|
|
31
48
|
kind: fields[3] === 'symlink' ? 'symlink' : 'file',
|
|
49
|
+
...(fields[4] ? { checksum: fields[4] } : {}),
|
|
50
|
+
...(fields[5] === '1' ? { mutable: true } : {}),
|
|
32
51
|
};
|
|
33
52
|
});
|
|
34
53
|
}
|
|
35
54
|
/**
|
|
36
55
|
* Write managed file entries to a .filedist marker file.
|
|
37
|
-
* Format: path|packageName|packageVersion
|
|
56
|
+
* Format: path|packageName|packageVersion|kind|checksum|mutable
|
|
57
|
+
* mutable column: '1' = mutable, '0' = not mutable.
|
|
58
|
+
* Trailing columns up to (but not including) the last meaningful one are always written.
|
|
59
|
+
* A self-checksum row `.|<sha256hex>` is appended after all entry rows.
|
|
38
60
|
* Makes the file read-only after writing.
|
|
39
61
|
*/
|
|
40
62
|
async function writeMarker(markerFilePath, entries) {
|
|
@@ -51,12 +73,21 @@ async function writeMarker(markerFilePath, entries) {
|
|
|
51
73
|
return;
|
|
52
74
|
}
|
|
53
75
|
const rows = entries.map((e) => {
|
|
54
|
-
|
|
55
|
-
|
|
76
|
+
const kindField = e.kind === 'symlink' ? 'symlink' : '';
|
|
77
|
+
const checksumField = e.checksum ?? '';
|
|
78
|
+
const mutableField = e.mutable ? '1' : '0';
|
|
79
|
+
// Always include mutable (0/1) when a checksum is present; otherwise omit trailing empty columns
|
|
80
|
+
if (checksumField) {
|
|
81
|
+
return `${e.path}|${e.packageName}|${e.packageVersion}|${kindField}|${checksumField}|${mutableField}`;
|
|
82
|
+
}
|
|
83
|
+
if (kindField) {
|
|
84
|
+
return `${e.path}|${e.packageName}|${e.packageVersion}|${kindField}`;
|
|
56
85
|
}
|
|
57
86
|
return `${e.path}|${e.packageName}|${e.packageVersion}`;
|
|
58
87
|
});
|
|
59
|
-
|
|
88
|
+
const entryContent = `${rows.join('\n')}\n`;
|
|
89
|
+
const selfChecksum = (0, utils_1.shortenChecksum)((0, utils_1.hashBuffer)(entryContent));
|
|
90
|
+
node_fs_1.default.writeFileSync(markerFilePath, `${entryContent}${SELF_CHECKSUM_PATH}|${selfChecksum}\n`, 'utf8');
|
|
60
91
|
node_fs_1.default.chmodSync(markerFilePath, 0o444);
|
|
61
92
|
}
|
|
62
93
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/fileset/markers.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"markers.js","sourceRoot":"","sources":["../../src/fileset/markers.ts"],"names":[],"mappings":"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"}
|