filedist 0.31.0 → 0.33.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.
Files changed (129) hide show
  1. package/README.md +301 -254
  2. package/dist/cli/actions/check.d.ts +5 -2
  3. package/dist/cli/actions/check.d.ts.map +1 -1
  4. package/dist/cli/actions/check.js +9 -3
  5. package/dist/cli/actions/check.js.map +1 -1
  6. package/dist/cli/actions/init.d.ts.map +1 -1
  7. package/dist/cli/actions/init.js +10 -3
  8. package/dist/cli/actions/init.js.map +1 -1
  9. package/dist/cli/actions/install.d.ts +7 -0
  10. package/dist/cli/actions/install.d.ts.map +1 -0
  11. package/dist/cli/actions/{extract.js → install.js} +15 -13
  12. package/dist/cli/actions/install.js.map +1 -0
  13. package/dist/cli/actions/list.d.ts +1 -1
  14. package/dist/cli/actions/list.d.ts.map +1 -1
  15. package/dist/cli/actions/list.js +4 -2
  16. package/dist/cli/actions/list.js.map +1 -1
  17. package/dist/cli/actions/remove.d.ts +20 -0
  18. package/dist/cli/actions/remove.d.ts.map +1 -0
  19. package/dist/cli/actions/remove.js +133 -0
  20. package/dist/cli/actions/remove.js.map +1 -0
  21. package/dist/cli/actions/update.d.ts +8 -0
  22. package/dist/cli/actions/update.d.ts.map +1 -0
  23. package/dist/cli/actions/update.js +40 -0
  24. package/dist/cli/actions/update.js.map +1 -0
  25. package/dist/cli/argv.d.ts +8 -5
  26. package/dist/cli/argv.d.ts.map +1 -1
  27. package/dist/cli/argv.js +40 -15
  28. package/dist/cli/argv.js.map +1 -1
  29. package/dist/cli/binpkg.d.ts +1 -12
  30. package/dist/cli/binpkg.d.ts.map +1 -1
  31. package/dist/cli/binpkg.js +64 -12
  32. package/dist/cli/binpkg.js.map +1 -1
  33. package/dist/cli/cli.d.ts.map +1 -1
  34. package/dist/cli/cli.js +80 -41
  35. package/dist/cli/cli.js.map +1 -1
  36. package/dist/cli/usage.d.ts.map +1 -1
  37. package/dist/cli/usage.js +65 -33
  38. package/dist/cli/usage.js.map +1 -1
  39. package/dist/fileset/check.d.ts +0 -1
  40. package/dist/fileset/check.d.ts.map +1 -1
  41. package/dist/fileset/check.js +7 -8
  42. package/dist/fileset/check.js.map +1 -1
  43. package/dist/fileset/constants.d.ts.map +1 -1
  44. package/dist/fileset/constants.js +3 -2
  45. package/dist/fileset/constants.js.map +1 -1
  46. package/dist/fileset/execute.d.ts.map +1 -1
  47. package/dist/fileset/execute.js +2 -1
  48. package/dist/fileset/execute.js.map +1 -1
  49. package/dist/fileset/gitignore.js +3 -3
  50. package/dist/fileset/gitignore.js.map +1 -1
  51. package/dist/fileset/markers.d.ts +1 -2
  52. package/dist/fileset/markers.d.ts.map +1 -1
  53. package/dist/fileset/markers.js +6 -14
  54. package/dist/fileset/markers.js.map +1 -1
  55. package/dist/fileset/test-utils.d.ts.map +1 -1
  56. package/dist/fileset/test-utils.js +2 -1
  57. package/dist/fileset/test-utils.js.map +1 -1
  58. package/dist/index.d.ts +9 -5
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +15 -5
  61. package/dist/index.js.map +1 -1
  62. package/dist/package/action-check.d.ts +19 -9
  63. package/dist/package/action-check.d.ts.map +1 -1
  64. package/dist/package/action-check.js +76 -32
  65. package/dist/package/action-check.js.map +1 -1
  66. package/dist/package/action-init.d.ts +6 -2
  67. package/dist/package/action-init.d.ts.map +1 -1
  68. package/dist/package/action-init.js +26 -15
  69. package/dist/package/action-init.js.map +1 -1
  70. package/dist/package/action-install.d.ts +22 -0
  71. package/dist/package/action-install.d.ts.map +1 -0
  72. package/dist/package/{action-extract.js → action-install.js} +205 -32
  73. package/dist/package/action-install.js.map +1 -0
  74. package/dist/package/action-list.d.ts +5 -2
  75. package/dist/package/action-list.d.ts.map +1 -1
  76. package/dist/package/action-list.js +5 -4
  77. package/dist/package/action-list.js.map +1 -1
  78. package/dist/package/action-remove.d.ts +65 -0
  79. package/dist/package/action-remove.d.ts.map +1 -0
  80. package/dist/package/action-remove.js +171 -0
  81. package/dist/package/action-remove.js.map +1 -0
  82. package/dist/package/action-update.d.ts +28 -0
  83. package/dist/package/action-update.d.ts.map +1 -0
  84. package/dist/package/action-update.js +45 -0
  85. package/dist/package/action-update.js.map +1 -0
  86. package/dist/package/calculate-diff.d.ts +1 -1
  87. package/dist/package/calculate-diff.d.ts.map +1 -1
  88. package/dist/package/calculate-diff.js +11 -13
  89. package/dist/package/calculate-diff.js.map +1 -1
  90. package/dist/package/config.d.ts +40 -27
  91. package/dist/package/config.d.ts.map +1 -1
  92. package/dist/package/config.js +164 -113
  93. package/dist/package/config.js.map +1 -1
  94. package/dist/package/index.d.ts +6 -4
  95. package/dist/package/index.d.ts.map +1 -1
  96. package/dist/package/index.js +7 -5
  97. package/dist/package/index.js.map +1 -1
  98. package/dist/package/lockfile.d.ts +69 -0
  99. package/dist/package/lockfile.d.ts.map +1 -0
  100. package/dist/package/lockfile.js +191 -0
  101. package/dist/package/lockfile.js.map +1 -0
  102. package/dist/package/resolve-files.d.ts +14 -0
  103. package/dist/package/resolve-files.d.ts.map +1 -1
  104. package/dist/package/resolve-files.js +5 -1
  105. package/dist/package/resolve-files.js.map +1 -1
  106. package/dist/package/source.d.ts +13 -0
  107. package/dist/package/source.d.ts.map +1 -1
  108. package/dist/package/source.js +32 -11
  109. package/dist/package/source.js.map +1 -1
  110. package/dist/package/symlinks.d.ts.map +1 -1
  111. package/dist/package/symlinks.js +8 -3
  112. package/dist/package/symlinks.js.map +1 -1
  113. package/dist/types.d.ts +7 -6
  114. package/dist/types.d.ts.map +1 -1
  115. package/package.json +1 -2
  116. package/dist/cli/actions/extract.d.ts +0 -7
  117. package/dist/cli/actions/extract.d.ts.map +0 -1
  118. package/dist/cli/actions/extract.js.map +0 -1
  119. package/dist/cli/actions/purge.d.ts +0 -6
  120. package/dist/cli/actions/purge.d.ts.map +0 -1
  121. package/dist/cli/actions/purge.js +0 -42
  122. package/dist/cli/actions/purge.js.map +0 -1
  123. package/dist/package/action-extract.d.ts +0 -20
  124. package/dist/package/action-extract.d.ts.map +0 -1
  125. package/dist/package/action-extract.js.map +0 -1
  126. package/dist/package/action-purge.d.ts +0 -19
  127. package/dist/package/action-purge.d.ts.map +0 -1
  128. package/dist/package/action-purge.js +0 -135
  129. package/dist/package/action-purge.js.map +0 -1
@@ -1,6 +1,9 @@
1
- import { FiledistConfig } from '../../types';
2
1
  /**
3
2
  * `check` CLI action handler.
3
+ *
4
+ * Always operates in frozen-lockfile mode: reads set definitions and pinned
5
+ * package versions from .filedist.lock. Fails if no lock file is found.
6
+ * The user configuration file is not used.
4
7
  */
5
- export declare function runCheck(config: FiledistConfig | null, argv: string[], cwd: string): Promise<void>;
8
+ export declare function runCheck(argv: string[], cwd: string, lockfilePath: string): Promise<void>;
6
9
  //# sourceMappingURL=check.d.ts.map
@@ -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,CA2Bf"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/check.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/F"}
@@ -1,24 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.runCheck = runCheck;
4
+ /* eslint-disable no-console */
4
5
  const argv_1 = require("../argv");
5
6
  const usage_1 = require("../usage");
6
7
  const action_check_1 = require("../../package/action-check");
7
8
  /**
8
9
  * `check` CLI action handler.
10
+ *
11
+ * Always operates in frozen-lockfile mode: reads set definitions and pinned
12
+ * package versions from .filedist.lock. Fails if no lock file is found.
13
+ * The user configuration file is not used.
9
14
  */
10
- async function runCheck(config, argv, cwd) {
15
+ async function runCheck(argv, cwd, lockfilePath) {
11
16
  if (argv.includes('--help')) {
12
17
  (0, usage_1.printUsage)('check');
13
18
  return;
14
19
  }
15
20
  const parsed = (0, argv_1.parseArgv)(argv);
16
- const entries = (0, argv_1.resolveEntriesFromConfigAndArgs)(config, argv);
17
21
  const summary = await (0, action_check_1.actionCheck)({
18
- entries,
22
+ entries: [],
19
23
  cwd,
20
24
  verbose: parsed.verbose,
25
+ lockfilePath,
21
26
  localOnly: parsed.localOnly,
27
+ frozenLockfile: true,
22
28
  });
23
29
  const hasDrift = summary.missing.length > 0 || summary.conflict.length > 0 || summary.extra.length > 0;
24
30
  if (hasDrift) {
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/actions/check.ts"],"names":[],"mappings":";;AAYA,4BA4BC;AAxCD,+BAA+B;AAC/B,kCAAoC;AACpC,oCAAsC;AACtC,6DAAyD;AAEzD;;;;;;GAMG;AACI,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,GAAW,EAAE,YAAoB;IAC9E,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;IAE/B,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAW,EAAC;QAChC,OAAO,EAAE,EAAE;QACX,GAAG;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY;QACZ,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,IAAI;KACrB,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAiBf"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C;;GAEG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -19,12 +19,19 @@ async function runInit(config, argv, cwd) {
19
19
  }
20
20
  const parsed = (0, argv_1.parseArgv)(argv);
21
21
  const outputDir = parsed.output ? node_path_1.default.resolve(cwd, parsed.output) : cwd;
22
- const { verbose, files, packages } = parsed;
22
+ const { verbose, files } = parsed;
23
+ // Parse --package-config: config filename to embed in the generated bin shim
24
+ const pkgConfigIdx = argv.indexOf('--package-config');
25
+ let baseConfigFile;
26
+ if (pkgConfigIdx !== -1 && pkgConfigIdx + 1 < argv.length) {
27
+ baseConfigFile = argv[pkgConfigIdx + 1];
28
+ }
23
29
  const initConfig = {
24
30
  files,
25
- packages,
26
31
  };
32
+ if (baseConfigFile)
33
+ initConfig.baseConfigFile = baseConfigFile;
27
34
  await (0, action_init_1.actionInit)(outputDir, verbose ?? false, initConfig);
28
- console.log('Init complete. Scaffolded package.json and bin/filedist.js.');
35
+ console.log('Init complete. Scaffolded package.json, .filedist-package.yml, and bin/filedist.js.');
29
36
  }
30
37
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/actions/init.ts"],"names":[],"mappings":";;;;;AAWA,0BAqBC;AAhCD,+BAA+B;AAC/B,0DAA6B;AAG7B,kCAAoC;AACpC,oCAAsC;AACtC,2DAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,OAAO,CAC3B,MAA6B,EAC7B,IAAc,EACd,GAAW;IAEX,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE5C,MAAM,UAAU,GAAG;QACjB,KAAK;QACL,QAAQ;KACT,CAAC;IAEF,MAAM,IAAA,wBAAU,EAAC,SAAS,EAAE,OAAO,IAAI,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/actions/init.ts"],"names":[],"mappings":";;;;;AAWA,0BA8BC;AAzCD,+BAA+B;AAC/B,0DAA6B;AAG7B,kCAAoC;AACpC,oCAAsC;AACtC,2DAAuD;AAEvD;;GAEG;AACI,KAAK,UAAU,OAAO,CAC3B,MAA6B,EAC7B,IAAc,EACd,GAAW;IAEX,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAElC,6EAA6E;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtD,IAAI,cAAkC,CAAC;IACvC,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1D,cAAc,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,UAAU,GAAkD;QAChE,KAAK;KACN,CAAC;IACF,IAAI,cAAc;QAAE,UAAU,CAAC,cAAc,GAAG,cAAc,CAAC;IAE/D,MAAM,IAAA,wBAAU,EAAC,SAAS,EAAE,OAAO,IAAI,KAAK,EAAE,UAAU,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CACT,qFAAqF,CACtF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { FiledistConfig } from '../../types';
2
+ /**
3
+ * `install` CLI action handler.
4
+ * Parses argv, merges with config, calls actionInstall, prints summary.
5
+ */
6
+ export declare function runInstall(config: FiledistConfig | null, argv: string[], cwd: string, lockfilePath: string): Promise<void>;
7
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/install.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AA+B5D;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA+Df"}
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  /* eslint-disable no-console */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.runExtract = runExtract;
4
+ exports.runInstall = runInstall;
5
5
  const argv_1 = require("../argv");
6
6
  const usage_1 = require("../usage");
7
7
  const progress_1 = require("../progress");
8
- const action_extract_1 = require("../../package/action-extract");
8
+ const action_install_1 = require("../../package/action-install");
9
9
  const utils_1 = require("../../utils");
10
10
  const POST_EXTRACT_CMD_EXAMPLE = '["node", "scripts/post-extract.js"]';
11
11
  function resolvePostExtractCmd(postExtractCmd, argv) {
@@ -24,29 +24,31 @@ function resolvePostExtractCmd(postExtractCmd, argv) {
24
24
  return { command, args, display };
25
25
  }
26
26
  /**
27
- * `extract` CLI action handler.
28
- * Parses argv, merges with config, calls actionExtract, prints summary.
27
+ * `install` CLI action handler.
28
+ * Parses argv, merges with config, calls actionInstall, prints summary.
29
29
  */
30
- async function runExtract(config, argv, cwd) {
30
+ async function runInstall(config, argv, cwd, lockfilePath) {
31
31
  if (argv.includes('--help')) {
32
- (0, usage_1.printUsage)('extract');
32
+ (0, usage_1.printUsage)('install');
33
33
  return;
34
34
  }
35
35
  const parsed = (0, argv_1.parseArgv)(argv);
36
36
  const entries = (0, argv_1.resolveEntriesFromConfigAndArgs)(config, argv);
37
37
  if (entries.length === 0) {
38
38
  if (parsed.verbose) {
39
- console.log('[verbose] No packages match the specified preset filter. Nothing to extract.');
39
+ console.log('[verbose] No packages match the specified preset filter. Nothing to install.');
40
40
  }
41
41
  return;
42
42
  }
43
43
  if (parsed.verbose) {
44
- console.log(`[verbose] Running CLI extract with entries: ${entries.map((e) => e.package + ' ' + JSON.stringify(e.selector)).join(', ')}`);
44
+ console.log(`[verbose] Running CLI install with entries: ${entries.map((e) => e.package + ' ' + JSON.stringify(e.selector)).join(', ')}`);
45
45
  }
46
- const result = await (0, action_extract_1.actionExtract)({
46
+ const result = await (0, action_install_1.actionInstall)({
47
47
  entries,
48
48
  cwd,
49
49
  verbose: parsed.verbose,
50
+ lockfilePath,
51
+ frozenLockfile: parsed.frozenLockfile,
50
52
  onProgress: (event) => {
51
53
  if (entries[0]?.silent)
52
54
  return;
@@ -69,14 +71,14 @@ async function runExtract(config, argv, cwd) {
69
71
  if (!isDryRun && config?.postExtractCmd !== undefined) {
70
72
  const command = resolvePostExtractCmd(config.postExtractCmd, argv);
71
73
  if (parsed.verbose) {
72
- console.log(`[verbose] Running post-extract command: ${command.display}`);
74
+ console.log(`[verbose] Running post-install command: ${command.display}`);
73
75
  }
74
76
  (0, utils_1.spawnWithLog)(command.command, command.args, cwd, parsed.verbose, true);
75
77
  if (parsed.verbose) {
76
- console.log(`[verbose] Post-extract command completed successfully.`);
78
+ console.log(`[verbose] Post-install command completed successfully.`);
77
79
  }
78
80
  }
79
- console.log(`Extract complete: ${result.added} added, ${result.modified} modified, ` +
81
+ console.log(`Install complete: ${result.added} added, ${result.modified} modified, ` +
80
82
  `${result.deleted} deleted, ${result.skipped} skipped.`);
81
83
  }
82
- //# sourceMappingURL=extract.js.map
84
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/actions/install.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@ import { FiledistConfig } from '../../types';
3
3
  * `list` CLI action handler.
4
4
  * Note: list always ignores --presets.
5
5
  */
6
- export declare function runList(config: FiledistConfig | null, argv: string[], cwd: string): Promise<void>;
6
+ export declare function runList(config: FiledistConfig | null, argv: string[], cwd: string, lockfilePath: string): Promise<void>;
7
7
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,IAAI,CAAC,CAoBf"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -8,15 +8,17 @@ const action_list_1 = require("../../package/action-list");
8
8
  * `list` CLI action handler.
9
9
  * Note: list always ignores --presets.
10
10
  */
11
- async function runList(config, argv, cwd) {
11
+ async function runList(config, argv, cwd, lockfilePath) {
12
12
  if (argv.includes('--help')) {
13
13
  (0, usage_1.printUsage)('list');
14
14
  return;
15
15
  }
16
16
  const parsed = (0, argv_1.parseArgv)(argv);
17
- const files = await (0, action_list_1.actionList)({
17
+ const files = (0, action_list_1.actionList)({
18
+ cwd,
18
19
  outputDir: parsed.output ?? cwd,
19
20
  verbose: parsed.verbose,
21
+ lockfilePath,
20
22
  });
21
23
  if (files.length === 0) {
22
24
  console.log('No managed files found');
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/actions/list.ts"],"names":[],"mappings":";;AAUA,0BAwBC;AAhCD,kCAAoC;AACpC,oCAAsC;AACtC,2DAAuD;AAEvD;;;GAGG;AACI,KAAK,UAAU,OAAO,CAC3B,MAA6B,EAC7B,IAAc,EACd,GAAW;IAEX,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,MAAM,IAAA,wBAAU,EAAC;QAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/actions/list.ts"],"names":[],"mappings":";;AAUA,0BA2BC;AAnCD,kCAAoC;AACpC,oCAAsC;AACtC,2DAAuD;AAEvD;;;GAGG;AACI,KAAK,UAAU,OAAO,CAC3B,MAA6B,EAC7B,IAAc,EACd,GAAW,EACX,YAAoB;IAEpB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAA,kBAAU,EAAC,MAAM,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,IAAA,wBAAU,EAAC;QACvB,GAAG;QACH,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,GAAG;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `remove` CLI action handler.
3
+ *
4
+ * Requires either a package name (positional argument) or the --all flag.
5
+ *
6
+ * When --all is given, removes every set entry from the config file and runs
7
+ * install with zero entries so all managed files are deleted and the lockfile
8
+ * is cleared.
9
+ *
10
+ * When a package name is given, removes matching entries from the config file
11
+ * (optionally filtered by --output, --presets), then runs a full install with
12
+ * the remaining entries so orphaned files are deleted and the lockfile is updated.
13
+ * Fails if no matching entry is found.
14
+ *
15
+ * Usage:
16
+ * filedist remove <package-name> [--output <path>] [--presets <tags>] [--dry-run] [--config <file>]
17
+ * filedist remove --all [--dry-run]
18
+ */
19
+ export declare function runRemove(argv: string[], cwd: string, lockfilePath: string, configFilePath: string): Promise<void>;
20
+ //# sourceMappingURL=remove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/remove.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
@@ -0,0 +1,133 @@
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.runRemove = runRemove;
7
+ /* eslint-disable no-console */
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const argv_1 = require("../argv");
10
+ const usage_1 = require("../usage");
11
+ const progress_1 = require("../progress");
12
+ const action_remove_1 = require("../../package/action-remove");
13
+ /**
14
+ * `remove` CLI action handler.
15
+ *
16
+ * Requires either a package name (positional argument) or the --all flag.
17
+ *
18
+ * When --all is given, removes every set entry from the config file and runs
19
+ * install with zero entries so all managed files are deleted and the lockfile
20
+ * is cleared.
21
+ *
22
+ * When a package name is given, removes matching entries from the config file
23
+ * (optionally filtered by --output, --presets), then runs a full install with
24
+ * the remaining entries so orphaned files are deleted and the lockfile is updated.
25
+ * Fails if no matching entry is found.
26
+ *
27
+ * Usage:
28
+ * filedist remove <package-name> [--output <path>] [--presets <tags>] [--dry-run] [--config <file>]
29
+ * filedist remove --all [--dry-run]
30
+ */
31
+ async function runRemove(argv, cwd, lockfilePath, configFilePath) {
32
+ if (argv.includes('--help')) {
33
+ (0, usage_1.printUsage)('remove');
34
+ return;
35
+ }
36
+ const parsed = (0, argv_1.parseArgv)(argv);
37
+ // Extract positional package name — first arg that is not a flag or flag value.
38
+ const packageSpec = extractPackageSpec(argv) ?? parsed.package;
39
+ if (!packageSpec && !parsed.all) {
40
+ console.error('filedist remove: requires a <package> argument or the --all flag.\n' +
41
+ 'Usage:\n' +
42
+ ' filedist remove <package> [--output <path>] [--presets <tags>]\n' +
43
+ ' filedist remove --all');
44
+ process.exitCode = 1;
45
+ return;
46
+ }
47
+ // Resolve config file path: --config flag takes precedence, then auto-discovered path
48
+ const resolvedConfigFilePath = parsed.configFile
49
+ ? node_path_1.default.resolve(cwd, parsed.configFile)
50
+ : configFilePath;
51
+ if (parsed.all && !packageSpec) {
52
+ const summary = await (0, action_remove_1.actionRemove)({
53
+ all: true,
54
+ cwd,
55
+ lockfilePath,
56
+ configFilePath: resolvedConfigFilePath,
57
+ dryRun: parsed.dryRun,
58
+ verbose: parsed.verbose,
59
+ onProgress: (event) => {
60
+ if (parsed.silent)
61
+ return;
62
+ if (event.type === 'file-deleted')
63
+ console.log(` - ${(0, progress_1.formatProgressFile)(event)}`);
64
+ },
65
+ });
66
+ console.log(`Remove complete: ${summary.removedEntries} config entries removed, ` +
67
+ `${summary.install.added} added, ${summary.install.modified} modified, ` +
68
+ `${summary.install.deleted} deleted.`);
69
+ if (summary.lockfileDeleted)
70
+ console.log('Lock file deleted.');
71
+ if (summary.configFileDeleted)
72
+ console.log('Config file deleted.');
73
+ return;
74
+ }
75
+ const summary = await (0, action_remove_1.actionRemove)({
76
+ cwd,
77
+ packageSpec,
78
+ outputPath: parsed.output,
79
+ presets: parsed.presets,
80
+ lockfilePath,
81
+ configFilePath: resolvedConfigFilePath,
82
+ dryRun: parsed.dryRun,
83
+ verbose: parsed.verbose,
84
+ onProgress: (event) => {
85
+ if (parsed.silent)
86
+ return;
87
+ if (event.type === 'file-added')
88
+ console.log(` + ${(0, progress_1.formatProgressFile)(event)}`);
89
+ else if (event.type === 'file-modified')
90
+ console.log(` ~ ${(0, progress_1.formatProgressFile)(event)}`);
91
+ else if (event.type === 'file-deleted')
92
+ console.log(` - ${(0, progress_1.formatProgressFile)(event)}`);
93
+ },
94
+ });
95
+ console.log(`Remove complete: ${summary.removedEntries} config entries removed, ` +
96
+ `${summary.install.added} added, ${summary.install.modified} modified, ` +
97
+ `${summary.install.deleted} deleted.`);
98
+ }
99
+ /**
100
+ * Extract the first positional argument from an argv array, skipping flags and
101
+ * their values.
102
+ *
103
+ * Flags that consume the next token (known value flags) are handled so their
104
+ * values are not mistakenly treated as the package name.
105
+ */
106
+ function extractPackageSpec(argv) {
107
+ const valueFlags = new Set([
108
+ '--output',
109
+ '-o',
110
+ '--files',
111
+ '--exclude',
112
+ '--content-regex',
113
+ '--presets',
114
+ '--config',
115
+ '--packages',
116
+ ]);
117
+ let i = 0;
118
+ while (i < argv.length) {
119
+ const arg = argv[i];
120
+ if (valueFlags.has(arg)) {
121
+ i += 2; // skip flag and its value
122
+ continue;
123
+ }
124
+ if (arg.startsWith('-')) {
125
+ i += 1; // skip boolean flag
126
+ continue;
127
+ }
128
+ return arg; // first non-flag positional argument
129
+ }
130
+ // eslint-disable-next-line no-undefined
131
+ return undefined;
132
+ }
133
+ //# sourceMappingURL=remove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/actions/remove.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `update` CLI action handler.
3
+ *
4
+ * Reads set definitions from .filedist.lock, bumps all packages to their
5
+ * latest available versions, runs a full install and writes an updated lockfile.
6
+ */
7
+ export declare function runUpdate(argv: string[], cwd: string, lockfilePath: string): Promise<void>;
8
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/actions/update.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhG"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.runUpdate = runUpdate;
5
+ const argv_1 = require("../argv");
6
+ const usage_1 = require("../usage");
7
+ const progress_1 = require("../progress");
8
+ const action_update_1 = require("../../package/action-update");
9
+ /**
10
+ * `update` CLI action handler.
11
+ *
12
+ * Reads set definitions from .filedist.lock, bumps all packages to their
13
+ * latest available versions, runs a full install and writes an updated lockfile.
14
+ */
15
+ async function runUpdate(argv, cwd, lockfilePath) {
16
+ if (argv.includes('--help')) {
17
+ (0, usage_1.printUsage)('update');
18
+ return;
19
+ }
20
+ const parsed = (0, argv_1.parseArgv)(argv);
21
+ const result = await (0, action_update_1.actionUpdate)({
22
+ cwd,
23
+ verbose: parsed.verbose,
24
+ dryRun: parsed.dryRun,
25
+ lockfilePath,
26
+ onProgress: (event) => {
27
+ if (parsed.silent)
28
+ return;
29
+ if (event.type === 'file-added')
30
+ console.log(` + ${(0, progress_1.formatProgressFile)(event)}`);
31
+ else if (event.type === 'file-modified')
32
+ console.log(` ~ ${(0, progress_1.formatProgressFile)(event)}`);
33
+ else if (event.type === 'file-deleted')
34
+ console.log(` - ${(0, progress_1.formatProgressFile)(event)}`);
35
+ },
36
+ });
37
+ console.log(`Update complete: ${result.added} added, ${result.modified} modified, ` +
38
+ `${result.deleted} deleted, ${result.skipped} skipped.`);
39
+ }
40
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/actions/update.ts"],"names":[],"mappings":";AAAA,+BAA+B;;AAc/B,8BAyBC;AApCD,kCAAoC;AACpC,oCAAsC;AACtC,0CAAiD;AACjD,+DAA2D;AAE3D;;;;;GAKG;AACI,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,GAAW,EAAE,YAAoB;IAC/E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAA,kBAAU,EAAC,QAAQ,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAY,EAAC;QAChC,GAAG;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY;QACZ,UAAU,EAAE,CAAC,KAAoB,EAAE,EAAE;YACnC,IAAI,MAAM,CAAC,MAAM;gBAAE,OAAO;YAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAA,6BAAkB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAA,6BAAkB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACpF,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAA,6BAAkB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACT,oBAAoB,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,QAAQ,aAAa;QACrE,GAAG,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,OAAO,WAAW,CAC1D,CAAC;AACJ,CAAC"}
@@ -8,7 +8,8 @@ export type FiledistCliConfig = FiledistConfig & {
8
8
  * defaults are applied downstream in the library.
9
9
  */
10
10
  export type ParsedArgv = {
11
- packages?: string[];
11
+ /** Positional package spec: filedist install <package_definition> */
12
+ package?: string;
12
13
  output?: string;
13
14
  files?: string[];
14
15
  exclude?: string[];
@@ -28,10 +29,12 @@ export type ParsedArgv = {
28
29
  upgrade?: boolean;
29
30
  silent?: boolean;
30
31
  verbose?: boolean;
31
- /** --no-save: skip saving config to .filedistrc.yml */
32
+ /** --no-save: skip saving config to .filedist.yml */
32
33
  ignoreConfig?: boolean;
33
34
  /** --local-only: skip package installs/git clones; verify only against .filedist markers */
34
35
  localOnly?: boolean;
36
+ /** --frozen-lockfile: use .filedist.lock exclusively; fail if lock file is missing */
37
+ frozenLockfile?: boolean;
35
38
  };
36
39
  export declare function resolveEffectivePresets(parsed: ParsedArgv, config?: FiledistCliConfig | null): string[];
37
40
  /**
@@ -40,8 +43,8 @@ export declare function resolveEffectivePresets(parsed: ParsedArgv, config?: Fil
40
43
  */
41
44
  export declare function parseArgv(argv: string[]): ParsedArgv;
42
45
  /**
43
- * Build FiledistExtractEntry objects from --packages + --output CLI flags.
44
- * Returns null if --packages is not set.
46
+ * Build a FiledistExtractEntry from the positional package arg + CLI flags.
47
+ * Returns null if no positional package arg is present.
45
48
  */
46
49
  export declare function buildEntriesFromArgv(parsed: ParsedArgv, presets?: string[]): FiledistExtractEntry[] | null;
47
50
  /**
@@ -51,7 +54,7 @@ export declare function buildEntriesFromArgv(parsed: ParsedArgv, presets?: strin
51
54
  export declare function applyArgvOverrides(entries: FiledistExtractEntry[], parsed: ParsedArgv): FiledistExtractEntry[];
52
55
  /**
53
56
  * Build and preset-filter extract entries from parsed CLI args and/or config.
54
- * When --packages is provided, entries come from the CLI flags.
57
+ * When a positional package arg is provided, one entry is built from CLI flags.
55
58
  * Otherwise, entries come from the config sets with CLI overrides applied.
56
59
  * Results are filtered by any requested --presets.
57
60
  * Throws if no packages are configured.
@@ -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,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"}
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,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,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,qDAAqD;IACrD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,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,CAwFpD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,MAAM,EAAyB,GACvC,oBAAoB,EAAE,GAAG,IAAI,CAsB/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,CAiBxB"}
package/dist/cli/argv.js CHANGED
@@ -75,7 +75,29 @@ function parseArgv(argv) {
75
75
  if (force === true && mutable === true) {
76
76
  throw new Error('--force and --mutable are mutually exclusive');
77
77
  }
78
- const packages = getCommaSplit('--packages');
78
+ // Positional package arg: first element that does not start with '-' and is
79
+ // not the value of a known flag-with-value (--output, --files, --exclude,
80
+ // --content-regex, --presets, --config).
81
+ const flagsWithValue = new Set([
82
+ '--output',
83
+ '-o',
84
+ '--files',
85
+ '--exclude',
86
+ '--content-regex',
87
+ '--presets',
88
+ '--config',
89
+ ]);
90
+ let positionalPkg;
91
+ for (let i = 0; i < argv.length; i++) {
92
+ if (argv[i].startsWith('-')) {
93
+ if (flagsWithValue.has(argv[i]))
94
+ i++; // skip the value following the flag
95
+ }
96
+ else {
97
+ positionalPkg = argv[i];
98
+ break;
99
+ }
100
+ }
79
101
  const all = getBoolFlag('--all');
80
102
  const presets = getCommaSplit('--presets');
81
103
  if (all === true && presets && presets.length > 0) {
@@ -83,7 +105,7 @@ function parseArgv(argv) {
83
105
  }
84
106
  const verboseFlag = getBoolFlag('--verbose');
85
107
  return {
86
- packages,
108
+ package: positionalPkg,
87
109
  output: getValue('--output', '-o'),
88
110
  files: getCommaSplit('--files'),
89
111
  exclude: getCommaSplit('--exclude'),
@@ -102,30 +124,33 @@ function parseArgv(argv) {
102
124
  verbose: argv.includes('-v') ? true : verboseFlag,
103
125
  ignoreConfig: getBoolFlag('--no-save'),
104
126
  localOnly: getBoolFlag('--local-only'),
127
+ frozenLockfile: getBoolFlag('--frozen-lockfile'),
105
128
  };
106
129
  }
107
130
  /**
108
- * Build FiledistExtractEntry objects from --packages + --output CLI flags.
109
- * Returns null if --packages is not set.
131
+ * Build a FiledistExtractEntry from the positional package arg + CLI flags.
132
+ * Returns null if no positional package arg is present.
110
133
  */
111
134
  function buildEntriesFromArgv(parsed, presets = parsed.presets ?? []) {
112
- if (!parsed.packages || parsed.packages.length === 0) {
135
+ if (!parsed.package) {
113
136
  // eslint-disable-next-line unicorn/no-null
114
137
  return null;
115
138
  }
116
- // In ad-hoc --packages mode there is no entry-level presets tag, so we place
139
+ // In positional-package mode there is no entry-level presets tag, so we place
117
140
  // --presets into selector.presets. filterEntriesByPresets checks both fields,
118
141
  // which keeps --presets filtering working in this mode.
119
142
  // selector.presets is also forwarded to the target package's nested set extraction.
120
143
  const selector = buildSelectorFromArgv(parsed, presets);
121
144
  const output = buildOutputFromArgv(parsed);
122
- return parsed.packages.map((pkg) => ({
123
- package: pkg,
124
- output,
125
- selector,
126
- ...(parsed.silent !== undefined ? { silent: parsed.silent } : {}),
127
- ...(parsed.verbose !== undefined ? { verbose: parsed.verbose } : {}),
128
- }));
145
+ return [
146
+ {
147
+ package: parsed.package,
148
+ output,
149
+ selector,
150
+ ...(parsed.silent !== undefined ? { silent: parsed.silent } : {}),
151
+ ...(parsed.verbose !== undefined ? { verbose: parsed.verbose } : {}),
152
+ },
153
+ ];
129
154
  }
130
155
  /**
131
156
  * Apply CLI overrides from ParsedArgv to each FiledistExtractEntry.
@@ -161,7 +186,7 @@ function applyArgvOverrides(entries, parsed) {
161
186
  }
162
187
  /**
163
188
  * Build and preset-filter extract entries from parsed CLI args and/or config.
164
- * When --packages is provided, entries come from the CLI flags.
189
+ * When a positional package arg is provided, one entry is built from CLI flags.
165
190
  * Otherwise, entries come from the config sets with CLI overrides applied.
166
191
  * Results are filtered by any requested --presets.
167
192
  * Throws if no packages are configured.
@@ -172,7 +197,7 @@ function resolveEntriesFromConfigAndArgs(config, argv) {
172
197
  let entries = buildEntriesFromArgv(parsed, effectivePresets);
173
198
  if (!entries) {
174
199
  if (!config || config.sets.length === 0) {
175
- throw new Error(`No packages specified. Use --packages or a config file with sets.`);
200
+ throw new Error(`No packages specified. Use 'filedist install <package>' or a config file with sets.`);
176
201
  }
177
202
  entries = applyArgvOverrides(config.sets, parsed);
178
203
  }