filedist 0.21.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 (154) hide show
  1. package/README.md +631 -0
  2. package/dist/cli/actions/check.d.ts +6 -0
  3. package/dist/cli/actions/check.d.ts.map +1 -0
  4. package/dist/cli/actions/check.js +36 -0
  5. package/dist/cli/actions/check.js.map +1 -0
  6. package/dist/cli/actions/extract.d.ts +7 -0
  7. package/dist/cli/actions/extract.d.ts.map +1 -0
  8. package/dist/cli/actions/extract.js +60 -0
  9. package/dist/cli/actions/extract.js.map +1 -0
  10. package/dist/cli/actions/init.d.ts +6 -0
  11. package/dist/cli/actions/init.d.ts.map +1 -0
  12. package/dist/cli/actions/init.js +30 -0
  13. package/dist/cli/actions/init.js.map +1 -0
  14. package/dist/cli/actions/list.d.ts +7 -0
  15. package/dist/cli/actions/list.d.ts.map +1 -0
  16. package/dist/cli/actions/list.js +30 -0
  17. package/dist/cli/actions/list.js.map +1 -0
  18. package/dist/cli/actions/presets.d.ts +7 -0
  19. package/dist/cli/actions/presets.d.ts.map +1 -0
  20. package/dist/cli/actions/presets.js +34 -0
  21. package/dist/cli/actions/presets.js.map +1 -0
  22. package/dist/cli/actions/purge.d.ts +6 -0
  23. package/dist/cli/actions/purge.d.ts.map +1 -0
  24. package/dist/cli/actions/purge.js +39 -0
  25. package/dist/cli/actions/purge.js.map +1 -0
  26. package/dist/cli/argv.d.ts +52 -0
  27. package/dist/cli/argv.d.ts.map +1 -0
  28. package/dist/cli/argv.js +172 -0
  29. package/dist/cli/argv.js.map +1 -0
  30. package/dist/cli/bin.d.ts +3 -0
  31. package/dist/cli/bin.d.ts.map +1 -0
  32. package/dist/cli/bin.js +10 -0
  33. package/dist/cli/bin.js.map +1 -0
  34. package/dist/cli/binpkg.d.ts +13 -0
  35. package/dist/cli/binpkg.d.ts.map +1 -0
  36. package/dist/cli/binpkg.js +38 -0
  37. package/dist/cli/binpkg.js.map +1 -0
  38. package/dist/cli/cli.d.ts +11 -0
  39. package/dist/cli/cli.d.ts.map +1 -0
  40. package/dist/cli/cli.js +118 -0
  41. package/dist/cli/cli.js.map +1 -0
  42. package/dist/cli/progress.d.ts +6 -0
  43. package/dist/cli/progress.d.ts.map +1 -0
  44. package/dist/cli/progress.js +12 -0
  45. package/dist/cli/progress.js.map +1 -0
  46. package/dist/cli/usage.d.ts +6 -0
  47. package/dist/cli/usage.d.ts.map +1 -0
  48. package/dist/cli/usage.js +151 -0
  49. package/dist/cli/usage.js.map +1 -0
  50. package/dist/fileset/check.d.ts +15 -0
  51. package/dist/fileset/check.d.ts.map +1 -0
  52. package/dist/fileset/check.js +70 -0
  53. package/dist/fileset/check.js.map +1 -0
  54. package/dist/fileset/constants.d.ts +18 -0
  55. package/dist/fileset/constants.d.ts.map +1 -0
  56. package/dist/fileset/constants.js +30 -0
  57. package/dist/fileset/constants.js.map +1 -0
  58. package/dist/fileset/diff.d.ts +16 -0
  59. package/dist/fileset/diff.d.ts.map +1 -0
  60. package/dist/fileset/diff.js +111 -0
  61. package/dist/fileset/diff.js.map +1 -0
  62. package/dist/fileset/execute.d.ts +29 -0
  63. package/dist/fileset/execute.d.ts.map +1 -0
  64. package/dist/fileset/execute.js +153 -0
  65. package/dist/fileset/execute.js.map +1 -0
  66. package/dist/fileset/gitignore.d.ts +20 -0
  67. package/dist/fileset/gitignore.d.ts.map +1 -0
  68. package/dist/fileset/gitignore.js +94 -0
  69. package/dist/fileset/gitignore.js.map +1 -0
  70. package/dist/fileset/index.d.ts +5 -0
  71. package/dist/fileset/index.d.ts.map +1 -0
  72. package/dist/fileset/index.js +22 -0
  73. package/dist/fileset/index.js.map +1 -0
  74. package/dist/fileset/markers.d.ts +22 -0
  75. package/dist/fileset/markers.d.ts.map +1 -0
  76. package/dist/fileset/markers.js +74 -0
  77. package/dist/fileset/markers.js.map +1 -0
  78. package/dist/fileset/package-files.d.ts +21 -0
  79. package/dist/fileset/package-files.d.ts.map +1 -0
  80. package/dist/fileset/package-files.js +102 -0
  81. package/dist/fileset/package-files.js.map +1 -0
  82. package/dist/fileset/purge.d.ts +18 -0
  83. package/dist/fileset/purge.d.ts.map +1 -0
  84. package/dist/fileset/purge.js +94 -0
  85. package/dist/fileset/purge.js.map +1 -0
  86. package/dist/fileset/test-utils.d.ts +21 -0
  87. package/dist/fileset/test-utils.d.ts.map +1 -0
  88. package/dist/fileset/test-utils.js +94 -0
  89. package/dist/fileset/test-utils.js.map +1 -0
  90. package/dist/index.d.ts +14 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +19 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/package/action-check.d.ts +20 -0
  95. package/dist/package/action-check.d.ts.map +1 -0
  96. package/dist/package/action-check.js +65 -0
  97. package/dist/package/action-check.js.map +1 -0
  98. package/dist/package/action-extract.d.ts +20 -0
  99. package/dist/package/action-extract.d.ts.map +1 -0
  100. package/dist/package/action-extract.js +280 -0
  101. package/dist/package/action-extract.js.map +1 -0
  102. package/dist/package/action-init.d.ts +13 -0
  103. package/dist/package/action-init.d.ts.map +1 -0
  104. package/dist/package/action-init.js +83 -0
  105. package/dist/package/action-init.js.map +1 -0
  106. package/dist/package/action-list.d.ts +11 -0
  107. package/dist/package/action-list.d.ts.map +1 -0
  108. package/dist/package/action-list.js +12 -0
  109. package/dist/package/action-list.js.map +1 -0
  110. package/dist/package/action-purge.d.ts +19 -0
  111. package/dist/package/action-purge.d.ts.map +1 -0
  112. package/dist/package/action-purge.js +135 -0
  113. package/dist/package/action-purge.js.map +1 -0
  114. package/dist/package/calculate-diff.d.ts +12 -0
  115. package/dist/package/calculate-diff.d.ts.map +1 -0
  116. package/dist/package/calculate-diff.js +129 -0
  117. package/dist/package/calculate-diff.js.map +1 -0
  118. package/dist/package/config-merge.d.ts +19 -0
  119. package/dist/package/config-merge.d.ts.map +1 -0
  120. package/dist/package/config-merge.js +65 -0
  121. package/dist/package/config-merge.js.map +1 -0
  122. package/dist/package/config.d.ts +24 -0
  123. package/dist/package/config.d.ts.map +1 -0
  124. package/dist/package/config.js +86 -0
  125. package/dist/package/config.js.map +1 -0
  126. package/dist/package/content-replacements.d.ts +21 -0
  127. package/dist/package/content-replacements.d.ts.map +1 -0
  128. package/dist/package/content-replacements.js +94 -0
  129. package/dist/package/content-replacements.js.map +1 -0
  130. package/dist/package/index.d.ts +10 -0
  131. package/dist/package/index.d.ts.map +1 -0
  132. package/dist/package/index.js +16 -0
  133. package/dist/package/index.js.map +1 -0
  134. package/dist/package/resolve-files.d.ts +29 -0
  135. package/dist/package/resolve-files.d.ts.map +1 -0
  136. package/dist/package/resolve-files.js +225 -0
  137. package/dist/package/resolve-files.js.map +1 -0
  138. package/dist/package/source.d.ts +20 -0
  139. package/dist/package/source.d.ts.map +1 -0
  140. package/dist/package/source.js +193 -0
  141. package/dist/package/source.js.map +1 -0
  142. package/dist/package/symlinks.d.ts +25 -0
  143. package/dist/package/symlinks.d.ts.map +1 -0
  144. package/dist/package/symlinks.js +203 -0
  145. package/dist/package/symlinks.js.map +1 -0
  146. package/dist/types.d.ts +345 -0
  147. package/dist/types.d.ts.map +1 -0
  148. package/dist/types.js +3 -0
  149. package/dist/types.js.map +1 -0
  150. package/dist/utils.d.ts +60 -0
  151. package/dist/utils.d.ts.map +1 -0
  152. package/dist/utils.js +341 -0
  153. package/dist/utils.js.map +1 -0
  154. package/package.json +58 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cli = cli;
7
+ exports.setupUncaughtExceptionHandler = setupUncaughtExceptionHandler;
8
+ /* eslint-disable no-console */
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const config_1 = require("../package/config");
11
+ const usage_1 = require("./usage");
12
+ const extract_1 = require("./actions/extract");
13
+ const check_1 = require("./actions/check");
14
+ const list_1 = require("./actions/list");
15
+ const purge_1 = require("./actions/purge");
16
+ const init_1 = require("./actions/init");
17
+ const presets_1 = require("./actions/presets");
18
+ const KNOWN_COMMANDS = new Set(['extract', 'check', 'list', 'purge', 'init', 'presets']);
19
+ /**
20
+ * Top-level CLI router.
21
+ * Detects command from argv, loads config, and dispatches to appropriate handler.
22
+ *
23
+ * @param argv - Process argument vector (argv[0] = node, argv[1] = script).
24
+ * @param cwd - Working directory for output path resolution (defaults to process.cwd()).
25
+ * @param configSearchCwd - Directory to search for filedist config (defaults to cwd).
26
+ */
27
+ async function cli(argv, cwd, configSearchCwd) {
28
+ const args = argv.slice(2); // strip node + script
29
+ // Handle global --help with no command
30
+ if (args.includes('--help') && args.length === 1) {
31
+ (0, usage_1.printUsage)();
32
+ return 0;
33
+ }
34
+ // Handle global --version
35
+ if (args.includes('--version')) {
36
+ (0, usage_1.printVersion)();
37
+ return 0;
38
+ }
39
+ // Detect action
40
+ let action;
41
+ let cmdArgs;
42
+ const firstArg = args[0];
43
+ if (firstArg && KNOWN_COMMANDS.has(firstArg)) {
44
+ action = firstArg;
45
+ cmdArgs = args.slice(1);
46
+ }
47
+ else {
48
+ // Default to extract
49
+ action = 'extract';
50
+ cmdArgs = args;
51
+ }
52
+ const effectiveCwd = cwd ?? process.cwd();
53
+ const effectiveConfigSearchCwd = configSearchCwd ?? effectiveCwd;
54
+ // Detect --config from full args (works regardless of position relative to command)
55
+ const configFlagIdx = args.indexOf('--config');
56
+ const configFilePath = configFlagIdx !== -1 && configFlagIdx + 1 < args.length
57
+ ? args[configFlagIdx + 1]
58
+ : // eslint-disable-next-line no-undefined
59
+ undefined;
60
+ // Load config from cwd, unless --packages is specified (CLI-only mode)
61
+ const packagesSpecified = args.includes('--packages');
62
+ let config;
63
+ if (configFilePath) {
64
+ config = await (0, config_1.loadFiledistConfigFile)(node_path_1.default.resolve(effectiveCwd, configFilePath));
65
+ }
66
+ else if (packagesSpecified) {
67
+ // eslint-disable-next-line unicorn/no-null
68
+ config = null;
69
+ }
70
+ else {
71
+ config = await (0, config_1.searchAndLoadFiledistConfig)(effectiveConfigSearchCwd);
72
+ }
73
+ try {
74
+ await dispatch(action, config, cmdArgs, effectiveCwd);
75
+ return 0;
76
+ }
77
+ catch (error) {
78
+ console.error(error.message);
79
+ return 1;
80
+ }
81
+ }
82
+ async function dispatch(action, config, cmdArgs, cwd) {
83
+ switch (action) {
84
+ case 'extract':
85
+ await (0, extract_1.runExtract)(config, cmdArgs, cwd);
86
+ break;
87
+ case 'check':
88
+ await (0, check_1.runCheck)(config, cmdArgs, cwd);
89
+ break;
90
+ case 'list':
91
+ await (0, list_1.runList)(config, cmdArgs, cwd);
92
+ break;
93
+ case 'purge':
94
+ await (0, purge_1.runPurge)(config, cmdArgs, cwd);
95
+ break;
96
+ case 'init':
97
+ await (0, init_1.runInit)(config, cmdArgs, cwd);
98
+ break;
99
+ case 'presets':
100
+ await (0, presets_1.runPresets)(config, cmdArgs);
101
+ break;
102
+ default:
103
+ throw new Error(`Unknown command: ${action}`);
104
+ }
105
+ }
106
+ function setupUncaughtExceptionHandler() {
107
+ if (!process.argv.includes('--verbose')) {
108
+ process.on('uncaughtException', (err) => {
109
+ const errs = `${err}`;
110
+ let i = errs.indexOf('\n');
111
+ if (i === -1)
112
+ i = errs.length;
113
+ console.log(errs.slice(0, Math.max(0, i)));
114
+ process.exit(3);
115
+ });
116
+ }
117
+ }
118
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { FileProgressEvent } from '../types';
2
+ /**
3
+ * Render per-file progress labels with explicit managed and gitignore state.
4
+ */
5
+ export declare function formatProgressFile(event: FileProgressEvent): string;
6
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAInE"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatProgressFile = formatProgressFile;
4
+ /**
5
+ * Render per-file progress labels with explicit managed and gitignore state.
6
+ */
7
+ function formatProgressFile(event) {
8
+ const managedFlag = event.managed ? 'M' : 'U';
9
+ const gitignoreFlag = event.gitignore ? 'I' : 'G';
10
+ return `${event.file} (${managedFlag},${gitignoreFlag})`;
11
+ }
12
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/cli/progress.ts"],"names":[],"mappings":";;AAKA,gDAIC;AAPD;;GAEG;AACH,SAAgB,kBAAkB,CAAC,KAAwB;IACzD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAClD,OAAO,GAAG,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,aAAa,GAAG,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Print usage/help text for the given command to stdout.
3
+ */
4
+ export declare function printUsage(command?: string): void;
5
+ export declare function printVersion(): void;
6
+ //# sourceMappingURL=usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA+IjD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAGnC"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.printUsage = printUsage;
5
+ exports.printVersion = printVersion;
6
+ const VERSION = '2.0.0';
7
+ /**
8
+ * Print usage/help text for the given command to stdout.
9
+ */
10
+ function printUsage(command) {
11
+ const cmd = command ?? 'extract';
12
+ switch (cmd) {
13
+ case 'extract':
14
+ console.log(`
15
+ Usage: filedist [extract] [options]
16
+
17
+ Extract files from one or more npm packages into a local output directory.
18
+
19
+ Options:
20
+ --packages <specs> Comma-separated package specs (e.g. my-pkg@^1.2.3). Overrides config sets.
21
+ --source <kind> Source kind: auto, npm, or git (default: auto).
22
+ --output, -o <dir> Output directory path. Required when --packages is used.
23
+ --files <globs> Comma-separated glob patterns for file selection.
24
+ --content-regex <re> Comma-separated regex strings for content filtering.
25
+ --force Overwrite existing unmanaged files.
26
+ --keep-existing Skip files that already exist; create missing ones.
27
+ --nosync [bool] Keep stale managed files on disk during extract (default: false).
28
+ --gitignore [bool] Enable/disable .gitignore update (default: true). Use --gitignore=false to disable.
29
+ --managed [bool] Enable/disable managed mode (default: true). Use --managed=false to write without .filedist marker.
30
+ --dry-run Report changes without writing to disk.
31
+ --upgrade Force fresh package install even if satisfying version installed.
32
+ --presets <tags> Comma-separated preset tags; only matching entries are processed.
33
+ --config <file> Path to a config file (overrides auto-discovered .filedistrc / package.json).
34
+ --silent Suppress per-file output; print only final summary line.
35
+ --verbose, -v Print detailed step information.
36
+ --help Print this help text.
37
+ --version Print version.
38
+
39
+ Exit codes: 0 success | 1 error
40
+ `);
41
+ break;
42
+ case 'check':
43
+ console.log(`
44
+ Usage: filedist check [options]
45
+
46
+ Verify that locally extracted files match their package sources.
47
+
48
+ Options:
49
+ --packages <specs> Comma-separated package specs. Overrides config sets.
50
+ --source <kind> Source kind: auto, npm, or git (default: auto).
51
+ --output, -o <dir> Output directory path.
52
+ --files <globs> Glob patterns for file selection.
53
+ --content-regex <re> Regex strings for content filtering.
54
+ --managed [bool] Silently skip unmanaged entries. Use --managed=false.
55
+ --presets <tags> Comma-separated preset tags; only matching entries are checked.
56
+ --config <file> Path to a config file (overrides auto-discovered .filedistrc / package.json).
57
+ --verbose, -v Print detailed comparison information.
58
+ --help Print this help text.
59
+
60
+ Exit codes: 0 all in sync | 1 drift detected or error
61
+ `);
62
+ break;
63
+ case 'list':
64
+ console.log(`
65
+ Usage: filedist list [options]
66
+
67
+ Print all files currently managed by filedist in the output directory.
68
+
69
+ Options:
70
+ --output, -o <dir> Output directory to inspect.
71
+ --config <file> Path to a config file (overrides auto-discovered .filedistrc / package.json).
72
+ --verbose, -v Print additional metadata per file.
73
+ --help Print this help text.
74
+
75
+ Output format: <relPath> <packageName>@<packageVersion>
76
+ Exit codes: 0 always
77
+ `);
78
+ break;
79
+ case 'purge':
80
+ console.log(`
81
+ Usage: filedist purge [options]
82
+
83
+ Remove all managed files from the output directory.
84
+
85
+ Options:
86
+ --packages <specs> Comma-separated package specs. Limits purge to matching entries.
87
+ --source <kind> Source kind: auto, npm, or git (default: auto).
88
+ --output, -o <dir> Output directory to purge.
89
+ --presets <tags> Comma-separated preset tags; only matching entries are purged.
90
+ --dry-run Print what would be removed without deleting.
91
+ --config <file> Path to a config file (overrides auto-discovered .filedistrc / package.json).
92
+ --silent Suppress per-file output.
93
+ --verbose, -v Print detailed deletion steps.
94
+ --help Print this help text.
95
+
96
+ Exit codes: 0 purge complete | 1 error during deletion
97
+ `);
98
+ break;
99
+ case 'init':
100
+ console.log(`
101
+ Usage: filedist init [options]
102
+
103
+ Scaffold a new publishable npm data package.
104
+
105
+ Options:
106
+ --output, -o <dir> Directory to scaffold into (default: current dir).
107
+ --verbose, -v Print scaffolding steps.
108
+ --help Print this help text.
109
+
110
+ Created files: package.json, bin/filedist.js
111
+ Exit codes: 0 success | 1 target dir has conflicting files
112
+ `);
113
+ break;
114
+ case 'presets':
115
+ console.log(`
116
+ Usage: filedist presets
117
+
118
+ List all unique preset tags defined in the configuration.
119
+ Presets are declared in each entry's "presets" field and can be used
120
+ to selectively run extract, check, list, or purge via --presets <tag>.
121
+
122
+ Options:
123
+ --config <file> Path to a config file (overrides auto-discovered .filedistrc / package.json).
124
+ --help Print this help text.
125
+
126
+ Output format: one preset per line, sorted alphabetically
127
+ Exit codes: 0 success | 1 no configuration found
128
+ `);
129
+ break;
130
+ default:
131
+ console.log(`
132
+ Usage: filedist [command] [options]
133
+
134
+ Commands:
135
+ extract (default) Extract files from npm packages
136
+ check Verify extracted files match package sources
137
+ list List all managed files
138
+ purge Remove managed files
139
+ init Scaffold a publishable data package
140
+ presets List all preset tags defined in configuration
141
+
142
+ Run 'filedist <command> --help' for command-specific help.
143
+ Version: ${VERSION}
144
+ `);
145
+ }
146
+ }
147
+ function printVersion() {
148
+ // Try to read version from package.json
149
+ console.log(`filedist v${VERSION}`);
150
+ }
151
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":";AAAA,+BAA+B;;AAO/B,gCA+IC;AAED,oCAGC;AAzJD,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAgB;IACzC,MAAM,GAAG,GAAG,OAAO,IAAI,SAAS,CAAC;IAEjC,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BjB,CAAC,CAAC;YACG,MAAM;QAER,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBjB,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"}
@@ -0,0 +1,15 @@
1
+ import { SelectorConfig, OutputConfig, ManagedFileMetadata, CheckResult } from '../types';
2
+ /**
3
+ * Check whether locally extracted files are in sync with their package source.
4
+ * Reuses diff logic to classify files as missing, modified, or extra.
5
+ * Applies contentReplacements before hash comparison.
6
+ *
7
+ * @param pkgPath Absolute path to the installed package directory, or null if not installed.
8
+ * @param outputDir Absolute path to the output directory.
9
+ * @param selector SelectorConfig controlling which package files are in scope.
10
+ * @param outputConfig OutputConfig (used for contentReplacements).
11
+ * @param marker Managed file entries from the .filedist marker.
12
+ * @returns CheckResult with missing, modified, and extra arrays.
13
+ */
14
+ export declare function checkFileset(pkgPath: string | null, outputDir: string, selector: SelectorConfig, outputConfig: OutputConfig, marker: ManagedFileMetadata[]): Promise<CheckResult>;
15
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/fileset/check.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,WAAW,EAEZ,MAAM,UAAU,CAAC;AAMlB;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,mBAAmB,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,CAuDtB"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.checkFileset = checkFileset;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const utils_1 = require("../utils");
10
+ const content_replacements_1 = require("../package/content-replacements");
11
+ const package_files_1 = require("./package-files");
12
+ /**
13
+ * Check whether locally extracted files are in sync with their package source.
14
+ * Reuses diff logic to classify files as missing, modified, or extra.
15
+ * Applies contentReplacements before hash comparison.
16
+ *
17
+ * @param pkgPath Absolute path to the installed package directory, or null if not installed.
18
+ * @param outputDir Absolute path to the output directory.
19
+ * @param selector SelectorConfig controlling which package files are in scope.
20
+ * @param outputConfig OutputConfig (used for contentReplacements).
21
+ * @param marker Managed file entries from the .filedist marker.
22
+ * @returns CheckResult with missing, modified, and extra arrays.
23
+ */
24
+ async function checkFileset(pkgPath, outputDir, selector, outputConfig, marker) {
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
+ }
34
+ 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
+ const result = { missing: [], modified: [], extra: [] };
39
+ // Check each managed file
40
+ for (const m of marker) {
41
+ const destPath = node_path_1.default.join(outputDir, m.path);
42
+ if (!node_fs_1.default.existsSync(destPath)) {
43
+ result.missing.push(m.path);
44
+ continue;
45
+ }
46
+ // Compare hash with content replacements applied
47
+ if (pkgFileSet.has(m.path)) {
48
+ const srcPath = node_path_1.default.join(pkgPath, m.path);
49
+ const srcContent = node_fs_1.default.readFileSync(srcPath, 'utf8');
50
+ const transformed = (0, content_replacements_1.applyContentReplacementsToBuffer)(srcContent, contentReplacements);
51
+ const srcHash = (0, utils_1.hashBuffer)(transformed);
52
+ const destHash = await (0, utils_1.hashFile)(destPath);
53
+ if (srcHash !== destHash) {
54
+ result.modified.push(m.path);
55
+ }
56
+ }
57
+ }
58
+ // Find extra files: in filtered package source but never extracted (not in marker).
59
+ // Only perform this check when the marker is non-empty; an empty marker means no
60
+ // extraction has taken place or everything was purged, so there is nothing to drift.
61
+ if (marker.length > 0) {
62
+ for (const relPath of pkgFiles) {
63
+ if (!managedByPath.has(relPath)) {
64
+ result.extra.push(relPath);
65
+ }
66
+ }
67
+ }
68
+ return result;
69
+ }
70
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/fileset/check.ts"],"names":[],"mappings":";;;;;AA2BA,oCA6DC;AAxFD,0DAA6B;AAC7B,sDAAyB;AASzB,oCAAgD;AAChD,0EAAmF;AAEnF,mDAAwD;AAExD;;;;;;;;;;;GAWG;AACI,KAAK,UAAU,YAAY,CAChC,OAAsB,EACtB,SAAiB,EACjB,QAAwB,EACxB,YAA0B,EAC1B,MAA6B;IAE7B,MAAM,mBAAmB,GAA+B,YAAY,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAE/F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,wBAAwB;QACxB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAED,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,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,MAAM,IAAA,qCAAqB,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAErC,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,iDAAiD;QACjD,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,IAAA,uDAAgC,EAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,WAAW,CAAC,CAAC;YAExC,MAAM,QAAQ,GAAG,MAAM,IAAA,gBAAQ,EAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,iFAAiF;IACjF,qFAAqF;IACrF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Name of the filedist marker file that tracks managed files.
3
+ */
4
+ export declare const MARKER_FILE = ".filedist";
5
+ /**
6
+ * Default inclusion glob patterns applied when no `files` is specified in SelectorConfig.
7
+ */
8
+ export declare const DEFAULT_FILE_PATTERNS: string[];
9
+ /**
10
+ * Default exclusion glob patterns always applied, regardless of whether a custom `exclude` is
11
+ * specified in SelectorConfig. Custom `exclude` patterns are appended to these.
12
+ * Excludes common package metadata files that are not meant to be extracted by consumers.
13
+ */
14
+ export declare const DEFAULT_EXCLUDE_PATTERNS: string[];
15
+ export declare const GITIGNORE_FILE = ".gitignore";
16
+ export declare const GITIGNORE_START = "# filedist:start";
17
+ export declare const GITIGNORE_END = "# filedist:end";
18
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/fileset/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,qBAAqB,UAAS,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,UASpC,CAAC;AAEF,eAAO,MAAM,cAAc,eAAe,CAAC;AAC3C,eAAO,MAAM,eAAe,qBAAqB,CAAC;AAClD,eAAO,MAAM,aAAa,mBAAmB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GITIGNORE_END = exports.GITIGNORE_START = exports.GITIGNORE_FILE = exports.DEFAULT_EXCLUDE_PATTERNS = exports.DEFAULT_FILE_PATTERNS = exports.MARKER_FILE = void 0;
4
+ /**
5
+ * Name of the filedist marker file that tracks managed files.
6
+ */
7
+ exports.MARKER_FILE = '.filedist';
8
+ /**
9
+ * Default inclusion glob patterns applied when no `files` is specified in SelectorConfig.
10
+ */
11
+ exports.DEFAULT_FILE_PATTERNS = ['**'];
12
+ /**
13
+ * Default exclusion glob patterns always applied, regardless of whether a custom `exclude` is
14
+ * specified in SelectorConfig. Custom `exclude` patterns are appended to these.
15
+ * Excludes common package metadata files that are not meant to be extracted by consumers.
16
+ */
17
+ exports.DEFAULT_EXCLUDE_PATTERNS = [
18
+ 'package.json',
19
+ '.filedistrc',
20
+ '.filedistrc.*',
21
+ '.git/**',
22
+ 'bin/**',
23
+ 'README.md',
24
+ 'node_modules/**',
25
+ 'LICENSE*',
26
+ ];
27
+ exports.GITIGNORE_FILE = '.gitignore';
28
+ exports.GITIGNORE_START = '# filedist:start';
29
+ exports.GITIGNORE_END = '# filedist:end';
30
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/fileset/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,WAAW,GAAG,WAAW,CAAC;AAEvC;;GAEG;AACU,QAAA,qBAAqB,GAAG,CAAC,IAAI,CAAC,CAAC;AAE5C;;;;GAIG;AACU,QAAA,wBAAwB,GAAG;IACtC,cAAc;IACd,aAAa;IACb,eAAe;IACf,SAAS;IACT,QAAQ;IACR,WAAW;IACX,iBAAiB;IACjB,UAAU;CACX,CAAC;AAEW,QAAA,cAAc,GAAG,YAAY,CAAC;AAC9B,QAAA,eAAe,GAAG,kBAAkB,CAAC;AACrC,QAAA,aAAa,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { SelectorConfig, OutputConfig, ExtractionMap, ManagedFileMetadata, ContentReplacementConfig } from '../types';
2
+ /**
3
+ * Pure read-only diff between package source files and an output directory.
4
+ * Classifies each file as toAdd, toModify, toDelete, toSkip, or conflicts.
5
+ * Makes NO disk writes.
6
+ *
7
+ * @param pkgPath Absolute path to the installed package directory.
8
+ * @param outputDir Absolute path to the output directory.
9
+ * @param selector SelectorConfig controlling which package files are included.
10
+ * @param outputConfig OutputConfig controlling extraction behaviour.
11
+ * @param existingMarker Current managed file entries from the .filedist marker.
12
+ * @param contentReplacements Content replacement configs to apply before hash comparison.
13
+ * @returns ExtractionMap classifying all file operations.
14
+ */
15
+ export declare function diff(pkgPath: string, outputDir: string, selector: SelectorConfig, outputConfig: OutputConfig, existingMarker: ManagedFileMetadata[], contentReplacements: ContentReplacementConfig[]): Promise<ExtractionMap>;
16
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/fileset/diff.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAMlB;;;;;;;;;;;;GAYG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,mBAAmB,EAAE,EACrC,mBAAmB,EAAE,wBAAwB,EAAE,GAC9C,OAAO,CAAC,aAAa,CAAC,CAoFxB"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.diff = diff;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_crypto_1 = __importDefault(require("node:crypto"));
10
+ const utils_1 = require("../utils");
11
+ const content_replacements_1 = require("../package/content-replacements");
12
+ const package_files_1 = require("./package-files");
13
+ /**
14
+ * Pure read-only diff between package source files and an output directory.
15
+ * Classifies each file as toAdd, toModify, toDelete, toSkip, or conflicts.
16
+ * Makes NO disk writes.
17
+ *
18
+ * @param pkgPath Absolute path to the installed package directory.
19
+ * @param outputDir Absolute path to the output directory.
20
+ * @param selector SelectorConfig controlling which package files are included.
21
+ * @param outputConfig OutputConfig controlling extraction behaviour.
22
+ * @param existingMarker Current managed file entries from the .filedist marker.
23
+ * @param contentReplacements Content replacement configs to apply before hash comparison.
24
+ * @returns ExtractionMap classifying all file operations.
25
+ */
26
+ async function diff(pkgPath, outputDir, selector, outputConfig, existingMarker, contentReplacements) {
27
+ const result = {
28
+ toAdd: [],
29
+ toModify: [],
30
+ toDelete: [],
31
+ toSkip: [],
32
+ conflicts: [],
33
+ };
34
+ // Build map of existing managed files by relPath -> metadata
35
+ const managedByPath = new Map(existingMarker.map((m) => [m.path, m]));
36
+ // Enumerate files from package
37
+ const pkgFiles = await (0, package_files_1.enumeratePackageFiles)(pkgPath, selector);
38
+ const pkgFileSet = new Set(pkgFiles);
39
+ for (const relPath of pkgFiles) {
40
+ const srcPath = node_path_1.default.join(pkgPath, relPath);
41
+ const destPath = node_path_1.default.join(outputDir, relPath);
42
+ const destExists = node_fs_1.default.existsSync(destPath);
43
+ const isManaged = managedByPath.has(relPath);
44
+ if (outputConfig.managed === false) {
45
+ if (destExists) {
46
+ result.toSkip.push({ relPath, reason: 'not-managed' });
47
+ }
48
+ else {
49
+ // In unmanaged mode, new files are still added (without marker)
50
+ const srcHash = await (0, utils_1.hashFile)(srcPath);
51
+ result.toAdd.push({ relPath, sourcePath: srcPath, destPath, hash: srcHash });
52
+ }
53
+ continue;
54
+ }
55
+ if (outputConfig.keepExisting && destExists) {
56
+ result.toSkip.push({ relPath, reason: 'keep-existing' });
57
+ continue;
58
+ }
59
+ if (!destExists) {
60
+ const srcHash = await (0, utils_1.hashFile)(srcPath);
61
+ result.toAdd.push({ relPath, sourcePath: srcPath, destPath, hash: srcHash });
62
+ continue;
63
+ }
64
+ // Dest exists
65
+ if (!isManaged) {
66
+ // File exists but not in marker — it's unmanaged/foreign
67
+ if (outputConfig.force) {
68
+ // Override: treat as toModify
69
+ const srcHash = await hashSrcWithReplacements(srcPath, contentReplacements);
70
+ result.toModify.push({ relPath, sourcePath: srcPath, destPath, hash: srcHash });
71
+ }
72
+ else {
73
+ result.conflicts.push({ relPath });
74
+ }
75
+ continue;
76
+ }
77
+ // Managed file — compare hashes
78
+ const srcHash = await hashSrcWithReplacements(srcPath, contentReplacements);
79
+ const destHash = await (0, utils_1.hashFile)(destPath);
80
+ if (srcHash === destHash) {
81
+ result.toSkip.push({ relPath, reason: 'keep-existing' });
82
+ }
83
+ else {
84
+ result.toModify.push({ relPath, sourcePath: srcPath, destPath, hash: srcHash });
85
+ }
86
+ }
87
+ // Find managed files that are no longer in the filtered package source.
88
+ // Skip for managed=false sets: they must not delete files managed by other sets
89
+ // (managed=false sets only add missing files and never take ownership of the marker).
90
+ if (outputConfig.managed !== false) {
91
+ for (const managed of existingMarker) {
92
+ if (!pkgFileSet.has(managed.path)) {
93
+ result.toDelete.push(managed.path);
94
+ }
95
+ }
96
+ }
97
+ return result;
98
+ }
99
+ async function hashSrcWithReplacements(srcPath, contentReplacements) {
100
+ // For binary files and when no replacements are configured, hash raw bytes
101
+ // so the result is consistent with hashFile() used for the destination.
102
+ if (contentReplacements.length === 0 || (0, utils_1.isBinaryFile)(srcPath))
103
+ return (0, utils_1.hashFile)(srcPath);
104
+ const content = node_fs_1.default.readFileSync(srcPath, 'utf8');
105
+ const transformed = (0, content_replacements_1.applyContentReplacementsToBuffer)(content, contentReplacements);
106
+ return hashString(transformed);
107
+ }
108
+ function hashString(content) {
109
+ return node_crypto_1.default.createHash('sha256').update(content).digest('hex');
110
+ }
111
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/fileset/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ExtractionMap, OutputConfig, PackageConfig, ExecuteResult, ManagedFileMetadata } from '../types';
2
+ /**
3
+ * Apply an ExtractionMap to disk:
4
+ * - Copy toAdd and toModify files from source to dest
5
+ * - Make managed files read-only (unless unmanaged mode)
6
+ * - Delete toDelete files
7
+ * - Update .filedist marker file (unless dryRun or unmanaged)
8
+ * - Update .gitignore (unless dryRun, unmanaged, or gitignore=false)
9
+ *
10
+ * @param map The ExtractionMap produced by diff().
11
+ * @param outputDir Absolute path to the output directory.
12
+ * @param outputConfig OutputConfig controlling write behaviour.
13
+ * @param pkg PackageConfig for marker metadata.
14
+ * @param pkgVersion Installed package version for marker metadata.
15
+ * @param existingMarker Existing managed file entries (for incremental update).
16
+ * @param cwd Working directory (kept for API compatibility).
17
+ * @returns ExecuteResult with counts and list of newly created files for rollback.
18
+ */
19
+ export declare function execute(map: ExtractionMap, outputDir: string, outputConfig: OutputConfig, pkg: PackageConfig, pkgVersion: string, existingMarker: ManagedFileMetadata[], _cwd?: string, verbose?: boolean): Promise<ExecuteResult>;
20
+ /**
21
+ * Delete a list of files from disk and make them writable first.
22
+ * Used for deferred deletions after all filesets have been processed.
23
+ */
24
+ export declare function deleteFiles(filePaths: string[], verbose?: boolean): Promise<void>;
25
+ /**
26
+ * Rollback: delete newly created files (those that did not exist before this run).
27
+ */
28
+ export declare function rollback(newlyCreated: string[]): Promise<void>;
29
+ //# sourceMappingURL=execute.d.ts.map