@mediaproc/core 1.2.2 → 1.3.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 (75) hide show
  1. package/dist/__tests__/explainFlag.test.d.ts +2 -0
  2. package/dist/__tests__/explainFlag.test.d.ts.map +1 -0
  3. package/dist/__tests__/explainFlag.test.js +44 -0
  4. package/dist/__tests__/explainFlag.test.js.map +1 -0
  5. package/dist/__tests__/explainTemplates.test.d.ts +2 -0
  6. package/dist/__tests__/explainTemplates.test.d.ts.map +1 -0
  7. package/dist/__tests__/explainTemplates.test.js +43 -0
  8. package/dist/__tests__/explainTemplates.test.js.map +1 -0
  9. package/dist/branding/index.d.ts +2 -0
  10. package/dist/branding/index.d.ts.map +1 -0
  11. package/dist/branding/index.js +3 -0
  12. package/dist/branding/index.js.map +1 -0
  13. package/dist/errors/index.d.ts +3 -0
  14. package/dist/errors/index.d.ts.map +1 -0
  15. package/dist/errors/index.js +4 -0
  16. package/dist/errors/index.js.map +1 -0
  17. package/dist/{explainFlag.d.ts → explain/explainFlag.d.ts} +3 -3
  18. package/dist/explain/explainFlag.d.ts.map +1 -0
  19. package/dist/{explainFlag.js → explain/explainFlag.js} +67 -17
  20. package/dist/explain/explainFlag.js.map +1 -0
  21. package/dist/explain/hook/explainPreActionHook.d.ts +7 -0
  22. package/dist/explain/hook/explainPreActionHook.d.ts.map +1 -0
  23. package/dist/explain/hook/explainPreActionHook.js +29 -0
  24. package/dist/explain/hook/explainPreActionHook.js.map +1 -0
  25. package/dist/explain/index.d.ts +5 -0
  26. package/dist/explain/index.d.ts.map +1 -0
  27. package/dist/explain/index.js +6 -0
  28. package/dist/explain/index.js.map +1 -0
  29. package/dist/explain/templates/explainDetailsTemplate.d.ts +3 -0
  30. package/dist/explain/templates/explainDetailsTemplate.d.ts.map +1 -0
  31. package/dist/explain/templates/explainDetailsTemplate.js +97 -0
  32. package/dist/explain/templates/explainDetailsTemplate.js.map +1 -0
  33. package/dist/explain/templates/explainHumanTemplate.d.ts +3 -0
  34. package/dist/explain/templates/explainHumanTemplate.d.ts.map +1 -0
  35. package/dist/explain/templates/explainHumanTemplate.js +41 -0
  36. package/dist/explain/templates/explainHumanTemplate.js.map +1 -0
  37. package/dist/formatters/explainFormatter.d.ts +3 -4
  38. package/dist/formatters/explainFormatter.d.ts.map +1 -1
  39. package/dist/formatters/explainFormatter.js +11 -225
  40. package/dist/formatters/explainFormatter.js.map +1 -1
  41. package/dist/formatters/index.d.ts +3 -0
  42. package/dist/formatters/index.d.ts.map +1 -0
  43. package/dist/formatters/index.js +4 -0
  44. package/dist/formatters/index.js.map +1 -0
  45. package/dist/index.d.ts +7 -9
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +14 -9
  48. package/dist/index.js.map +1 -1
  49. package/dist/types/explainTypes.d.ts +10 -0
  50. package/dist/types/explainTypes.d.ts.map +1 -1
  51. package/dist/types/explainTypes.js +7 -1
  52. package/dist/types/explainTypes.js.map +1 -1
  53. package/dist/types/index.d.ts +3 -0
  54. package/dist/types/index.d.ts.map +1 -0
  55. package/dist/types/index.js +4 -0
  56. package/dist/types/index.js.map +1 -0
  57. package/dist/utils/index.d.ts +2 -0
  58. package/dist/utils/index.d.ts.map +1 -0
  59. package/dist/utils/index.js +3 -0
  60. package/dist/utils/index.js.map +1 -0
  61. package/dist/utils/supportedExtensions.d.ts.map +1 -0
  62. package/dist/utils/supportedExtensions.js.map +1 -0
  63. package/dist/validators/index.d.ts +2 -0
  64. package/dist/validators/index.d.ts.map +1 -0
  65. package/dist/validators/index.js +3 -0
  66. package/dist/validators/index.js.map +1 -0
  67. package/dist/validators/pathValidator.js +1 -1
  68. package/dist/validators/pathValidator.js.map +1 -1
  69. package/package.json +3 -1
  70. package/dist/explainFlag.d.ts.map +0 -1
  71. package/dist/explainFlag.js.map +0 -1
  72. package/dist/validators/supportedExtensions.d.ts.map +0 -1
  73. package/dist/validators/supportedExtensions.js.map +0 -1
  74. /package/dist/{validators → utils}/supportedExtensions.d.ts +0 -0
  75. /package/dist/{validators → utils}/supportedExtensions.js +0 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=explainFlag.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainFlag.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/explainFlag.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { explainFlag } from '../explain/explainFlag.js';
3
+ import { ExplainMode } from '../types/explainTypes.js';
4
+ describe('explainFlag', () => {
5
+ it('should generate enriched ExplainContext with mode and context fields', () => {
6
+ const mockCommand = {
7
+ name: () => 'resize',
8
+ parent: { name: () => 'image' },
9
+ options: [
10
+ { attributeName: 'width', defaultValue: 100 },
11
+ { attributeName: 'height', defaultValue: 100 },
12
+ { attributeName: 'format', defaultValue: 'jpg' },
13
+ ],
14
+ };
15
+ const args = { width: 200, _: [] };
16
+ const options = { width: 200, explain: 'details' };
17
+ let output = '';
18
+ const originalLog = console.log;
19
+ console.log = (msg) => { output += msg + '\n'; };
20
+ explainFlag({ command: mockCommand, args, options, mode: ExplainMode.Details });
21
+ console.log = originalLog;
22
+ expect(output).toContain('EXPLANATION');
23
+ expect(output).toContain('Timestamp:');
24
+ expect(output).toContain('Mode: details');
25
+ expect(output).toContain('- width: 200');
26
+ });
27
+ it('should fallback to human mode for unknown explain value', () => {
28
+ const mockCommand = {
29
+ name: () => 'resize',
30
+ parent: { name: () => 'image' },
31
+ options: [],
32
+ };
33
+ const args = { _: [] };
34
+ const options = { explain: 'unknown' };
35
+ let output = '';
36
+ const originalLog = console.log;
37
+ console.log = (msg) => { output += msg + '\n'; };
38
+ explainFlag({ command: mockCommand, args, options });
39
+ console.log = originalLog;
40
+ expect(output).toContain('EXPLANATION');
41
+ expect(output).toContain('Mode: human');
42
+ });
43
+ });
44
+ //# sourceMappingURL=explainFlag.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainFlag.test.js","sourceRoot":"","sources":["../../src/__tests__/explainFlag.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ;YACpB,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;YAC/B,OAAO,EAAE;gBACP,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE;gBAC7C,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE;gBAC9C,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE;aACjD;SACF,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAG,EAAE,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACnD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;QAChC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAQ,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ;YACpB,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;YAC/B,OAAO,EAAE,EAAE;SACZ,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,CAAC,EAAG,EAAE,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACvC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;QAChC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAQ,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtD,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=explainTemplates.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainTemplates.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/explainTemplates.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { explainHumanTemplate } from '../explain/templates/explainHumanTemplate.js';
3
+ import { explainDetailsTemplate } from '../explain/templates/explainDetailsTemplate.js';
4
+ import { ExplainMode } from '../types/explainTypes.js';
5
+ describe('explain templates', () => {
6
+ const baseContext = {
7
+ command: 'resize',
8
+ plugin: 'image',
9
+ cliVersion: '1.0.0',
10
+ pluginVersion: '1.0.0',
11
+ timestamp: '2026-01-18T12:00:00Z',
12
+ user: 'testuser',
13
+ platform: 'linux x64',
14
+ mode: ExplainMode.Human,
15
+ inputs: { inputPath: 'in.jpg', width: 200 },
16
+ outputs: { outputPath: 'out.jpg' },
17
+ usedFlags: { width: { value: 200, source: 'user' } },
18
+ decisions: [
19
+ { key: 'width', value: 200, reason: 'user specified' }
20
+ ],
21
+ outcome: { result: 'A new file will be created at out.jpg' },
22
+ explainFlow: ['step 1', 'step 2'],
23
+ };
24
+ it('should render enriched context in human template', () => {
25
+ const result = explainHumanTemplate(baseContext);
26
+ expect(result).toContain('Timestamp: 2026-01-18T12:00:00Z');
27
+ expect(result).toContain('User: testuser');
28
+ expect(result).toContain('Platform: linux x64');
29
+ expect(result).toContain('Mode: human');
30
+ expect(result).toContain('width will be set to 200');
31
+ });
32
+ it('should render enriched context in details template', () => {
33
+ const ctx = { ...baseContext, mode: ExplainMode.Details };
34
+ const result = explainDetailsTemplate(ctx);
35
+ expect(result).toContain('Timestamp: 2026-01-18T12:00:00Z');
36
+ expect(result).toContain('User: testuser');
37
+ expect(result).toContain('Platform: linux x64');
38
+ expect(result).toContain('Mode: details');
39
+ expect(result).toContain('Inputs:');
40
+ expect(result).toContain('Outputs:');
41
+ });
42
+ });
43
+ //# sourceMappingURL=explainTemplates.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainTemplates.test.js","sourceRoot":"","sources":["../../src/__tests__/explainTemplates.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gDAAgD,CAAC;AACxF,OAAO,EAAE,WAAW,EAAkB,MAAM,0BAA0B,CAAC;AAEvE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,WAAW,GAAmB;QAClC,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,OAAO;QACf,UAAU,EAAE,OAAO;QACnB,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,WAAW;QACrB,IAAI,EAAE,WAAW,CAAC,KAAK;QACvB,MAAM,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;QAC3C,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAClC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACpD,SAAS,EAAE;YACT,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE;SACvD;QACD,OAAO,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE;QAC5D,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;KAClC,CAAC;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './branding.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/branding/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Branding
2
+ export * from './branding.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/branding/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,cAAc,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './errorTypes.js';
2
+ export * from './exitCodes.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Errors & Exit Codes
2
+ export * from './errorTypes.js';
3
+ export * from './exitCodes.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -1,14 +1,14 @@
1
- import { ExplainFormat } from './formatters/explainFormatter.js';
1
+ import { ExplainMode } from '../types/explainTypes.js';
2
2
  /**
3
3
  * explainFlag - Automatically gathers command context, prints explanation, then runs the handler.
4
4
  * @param params - { commandName, args, options, handler }
5
5
  */
6
- export declare function explainFlag({ command, args, options, inputKeys, outputKeys, format, }: {
6
+ export declare function explainFlag({ command, args, options, inputKeys, outputKeys, mode, }: {
7
7
  command: any;
8
8
  args?: Record<string, any>;
9
9
  options?: Record<string, any>;
10
10
  inputKeys?: string[];
11
11
  outputKeys?: string[];
12
- format?: ExplainFormat;
12
+ mode?: ExplainMode;
13
13
  }): void;
14
14
  //# sourceMappingURL=explainFlag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainFlag.d.ts","sourceRoot":"","sources":["../../src/explain/explainFlag.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,IAAS,EACT,OAAY,EACZ,SAAkC,EAClC,UAA0C,EAC1C,IAAwB,GACzB,EAAE;IACD,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB,QAgKA"}
@@ -1,12 +1,13 @@
1
1
  import chalk from 'chalk';
2
- import { explainFormatter } from './formatters/explainFormatter.js';
3
- import { getCliVersion, getVersion } from './branding/branding.js';
2
+ import { explainFormatter } from '../formatters/explainFormatter.js';
3
+ import { getCliVersion, getVersion } from '../branding/branding.js';
4
+ import { ExplainMode } from '../types/explainTypes.js';
4
5
  import os from 'os';
5
6
  /**
6
7
  * explainFlag - Automatically gathers command context, prints explanation, then runs the handler.
7
8
  * @param params - { commandName, args, options, handler }
8
9
  */
9
- export function explainFlag({ command, args = {}, options = {}, inputKeys = ['input', 'inputPath'], outputKeys = ['output', 'outputPath', 'o'], format = 'human', }) {
10
+ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['input', 'inputPath'], outputKeys = ['output', 'outputPath', 'o'], mode = ExplainMode.Human, }) {
10
11
  // Auto-detect command name
11
12
  const commandName = command?.name?.() || command?._name || 'unknown';
12
13
  const environment = {
@@ -15,35 +16,61 @@ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['in
15
16
  nodeVersion: process.version,
16
17
  shell: process.env.SHELL || process.env.TERM || 'unknown',
17
18
  };
18
- // Detect input/output paths
19
+ // Detect input/output paths and gather all input/output arguments
19
20
  let inputPath = '';
20
21
  let outputPath = '';
22
+ let allInputs = {};
23
+ let allOutputs = {};
21
24
  for (const k of inputKeys) {
22
- if (args[k])
25
+ if (args[k]) {
23
26
  inputPath = args[k];
24
- if (options[k])
27
+ allInputs[k] = args[k];
28
+ }
29
+ if (options[k]) {
25
30
  inputPath = options[k];
31
+ allInputs[k] = options[k];
32
+ }
26
33
  }
27
34
  for (const k of outputKeys) {
28
- if (args[k])
35
+ if (args[k]) {
29
36
  outputPath = args[k];
30
- if (options[k])
37
+ allOutputs[k] = args[k];
38
+ }
39
+ if (options[k]) {
31
40
  outputPath = options[k];
41
+ allOutputs[k] = options[k];
42
+ }
32
43
  }
33
44
  // Gather used flags
34
45
  let explainValue = undefined;
46
+ let explainOnly = false;
35
47
  if (typeof options.explain === 'string') {
36
48
  explainValue = options.explain;
49
+ if (explainValue === 'only')
50
+ explainOnly = true;
37
51
  }
38
52
  else if (Array.isArray(args._) && args._.length > 0) {
39
53
  // Check for --explain details as positional
40
54
  const idx = args._.findIndex((v) => v === 'explain');
41
55
  if (idx !== -1 && args._[idx + 1]) {
42
56
  explainValue = args._[idx + 1];
57
+ if (explainValue === 'only')
58
+ explainOnly = true;
43
59
  }
44
60
  }
45
- if (explainValue === 'details' || explainValue === 'json' || explainValue === 'human') {
46
- format = explainValue;
61
+ if (explainValue === 'details') {
62
+ mode = ExplainMode.Details;
63
+ }
64
+ else if (explainValue === 'json') {
65
+ mode = ExplainMode.Json;
66
+ }
67
+ else if (explainValue === 'human') {
68
+ mode = ExplainMode.Human;
69
+ }
70
+ else if (explainValue) {
71
+ // fallback for unknown explain values
72
+ console.warn(chalk.yellow(`Unknown explain mode: ${explainValue}, using 'human' mode.`));
73
+ mode = ExplainMode.Human;
47
74
  }
48
75
  // Gather all possible flags from command (Commander.js API)
49
76
  const usedFlags = {};
@@ -53,13 +80,24 @@ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['in
53
80
  const flagName = opt.attributeName || opt.long?.replace(/^--/, '') || opt.short?.replace(/^-/, '');
54
81
  if (!flagName)
55
82
  continue;
56
- const userValue = options[flagName];
83
+ let userValue = options[flagName];
84
+ // Handle boolean flags
85
+ if (typeof userValue === 'boolean')
86
+ userValue = userValue ? 'enabled' : 'disabled';
87
+ // Handle array flags
88
+ if (Array.isArray(userValue))
89
+ userValue = userValue.join(', ');
57
90
  if (userValue !== undefined) {
58
91
  usedFlags[flagName] = { value: userValue, source: 'user' };
59
92
  }
60
93
  else if (Object.prototype.hasOwnProperty.call(opt, 'defaultValue')) {
61
- usedFlags[flagName] = { value: opt.defaultValue, source: 'default' };
62
- omittedFlags[flagName] = { defaultValue: opt.defaultValue, source: 'default' };
94
+ let defVal = opt.defaultValue;
95
+ if (typeof defVal === 'boolean')
96
+ defVal = defVal ? 'enabled' : 'disabled';
97
+ if (Array.isArray(defVal))
98
+ defVal = defVal.join(', ');
99
+ usedFlags[flagName] = { value: defVal, source: 'default' };
100
+ omittedFlags[flagName] = { defaultValue: defVal, source: 'default' };
63
101
  }
64
102
  else {
65
103
  usedFlags[flagName] = { value: undefined, source: 'system' };
@@ -70,7 +108,12 @@ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['in
70
108
  for (const [key, value] of Object.entries(options)) {
71
109
  if (key === 'explain')
72
110
  continue;
73
- usedFlags[key] = { value, source: value !== undefined ? 'user' : 'system' };
111
+ let val = value;
112
+ if (typeof val === 'boolean')
113
+ val = val ? 'enabled' : 'disabled';
114
+ if (Array.isArray(val))
115
+ val = val.join(', ');
116
+ usedFlags[key] = { value: val, source: val !== undefined ? 'user' : 'system' };
74
117
  }
75
118
  }
76
119
  // Build ExplainContext with plugin/command info and version
@@ -95,7 +138,13 @@ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['in
95
138
  plugin: command?.parent?.name?.() || undefined,
96
139
  cliVersion,
97
140
  pluginVersion,
98
- inputs: { inputPath, outputPath },
141
+ // Context enrichment
142
+ timestamp: new Date().toISOString(),
143
+ user: process.env.USER || process.env.USERNAME || 'unknown',
144
+ platform: `${os.platform()} ${os.arch()}`,
145
+ mode,
146
+ inputs: { inputPath, outputPath, ...allInputs },
147
+ outputs: Object.keys(allOutputs).length > 0 ? allOutputs : undefined,
99
148
  usedFlags,
100
149
  omittedFlags: Object.keys(omittedFlags).length > 0 ? omittedFlags : undefined,
101
150
  decisions: Object.entries(usedFlags).map(([key, v]) => ({
@@ -123,6 +172,7 @@ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['in
123
172
  '6. Show summary and any errors encountered.'
124
173
  ],
125
174
  environment,
175
+ explainOnly,
126
176
  technical: {
127
177
  library: 'sharp',
128
178
  tool: 'mediaproc',
@@ -134,8 +184,8 @@ export function explainFlag({ command, args = {}, options = {}, inputKeys = ['in
134
184
  },
135
185
  };
136
186
  // Print explanation only
137
- const explanation = explainFormatter(context, format);
138
- if (format === 'json') {
187
+ const explanation = explainFormatter(context, mode);
188
+ if (mode === ExplainMode.Json) {
139
189
  // Add a styled header for JSON output
140
190
  // Print JSON with a clear header
141
191
  console.log(chalk.bold.bgBlueBright.white(' EXPLANATION (JSON) '));
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainFlag.js","sourceRoot":"","sources":["../../src/explain/explainFlag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Command } from 'commander';
2
+ /**
3
+ * Global preAction hook for Commander.js to support --explain and --explain=only.
4
+ * Prints explanation before command runs. If --explain=only, exits after explanation.
5
+ */
6
+ export declare function explainPreActionHook(thisCmd: Command, actionCmd?: Command): void;
7
+ //# sourceMappingURL=explainPreActionHook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainPreActionHook.d.ts","sourceRoot":"","sources":["../../../src/explain/hook/explainPreActionHook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAsBhF"}
@@ -0,0 +1,29 @@
1
+ import { explainFlag } from '../explainFlag.js';
2
+ /**
3
+ * Global preAction hook for Commander.js to support --explain and --explain=only.
4
+ * Prints explanation before command runs. If --explain=only, exits after explanation.
5
+ */
6
+ export function explainPreActionHook(thisCmd, actionCmd) {
7
+ // Commander passes the command instance as 'thisCmd', and the subcommand as 'actionCmd'.
8
+ // We'll use 'actionCmd' if available (for subcommands), otherwise 'thisCmd'.
9
+ const cmd = actionCmd || thisCmd;
10
+ const opts = cmd.opts ? cmd.opts() : {};
11
+ // Gather positional arguments if available (Commander stores them in cmd.args or cmd._args)
12
+ let positionalArgs = {};
13
+ if (Array.isArray(cmd.args) && cmd.args.length > 0) {
14
+ positionalArgs = { _: cmd.args };
15
+ }
16
+ // Support --explain, --explain=details, --explain=only, etc.
17
+ if (opts.explain) {
18
+ explainFlag({
19
+ command: cmd,
20
+ args: positionalArgs,
21
+ options: opts,
22
+ });
23
+ // If --explain=only, do not execute the command
24
+ if (opts.explain === 'only') {
25
+ process.exit(0);
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=explainPreActionHook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainPreActionHook.js","sourceRoot":"","sources":["../../../src/explain/hook/explainPreActionHook.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,SAAmB;IACxE,yFAAyF;IACzF,6EAA6E;IAC7E,MAAM,GAAG,GAAY,SAAS,IAAI,OAAO,CAAC;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,4FAA4F;IAC5F,IAAI,cAAc,GAAwB,EAAE,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO,CAAE,GAAW,CAAC,IAAI,CAAC,IAAK,GAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,cAAc,GAAG,EAAE,CAAC,EAAG,GAAW,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,6DAA6D;IAC7D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,WAAW,CAAC;YACV,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,gDAAgD;QAChD,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './templates/explainHumanTemplate.js';
2
+ export * from './templates/explainDetailsTemplate.js';
3
+ export * from './explainFlag.js';
4
+ export * from './hook/explainPreActionHook.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/explain/index.ts"],"names":[],"mappings":"AACA,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,6 @@
1
+ // Explain System (Templates, Flag, Hook)
2
+ export * from './templates/explainHumanTemplate.js';
3
+ export * from './templates/explainDetailsTemplate.js';
4
+ export * from './explainFlag.js';
5
+ export * from './hook/explainPreActionHook.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/explain/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ExplainContext } from '../../types/explainTypes.js';
2
+ export declare function explainDetailsTemplate(context: ExplainContext): string;
3
+ //# sourceMappingURL=explainDetailsTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainDetailsTemplate.d.ts","sourceRoot":"","sources":["../../../src/explain/templates/explainDetailsTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CA8FtE"}
@@ -0,0 +1,97 @@
1
+ import chalk from 'chalk';
2
+ export function explainDetailsTemplate(context) {
3
+ let output = '';
4
+ output += chalk.bold.bgMagenta.white('╔════════════════════════════════════════════════════════════════╗') + '\n';
5
+ output += chalk.bold.bgMagenta.white('║ EXPLANATION (DETAILS) ║') + '\n';
6
+ output += chalk.bold.bgMagenta.white('╚════════════════════════════════════════════════════════════════╝') + '\n';
7
+ if (context.explainOnly) {
8
+ output += chalk.bgYellow.black(' [EXPLAIN-ONLY MODE: No command will be executed] ') + '\n';
9
+ }
10
+ // Context enrichment (timestamp, user, platform, mode)
11
+ output += chalk.gray(`Timestamp: ${context.timestamp ?? 'N/A'} | User: ${context.user ?? 'N/A'} | Platform: ${context.platform ?? 'N/A'} | Mode: ${context.mode ?? 'N/A'}`) + '\n';
12
+ if (context.plugin || context.cliVersion || context.pluginVersion) {
13
+ output += chalk.bold(`Plugin: ${context.plugin || 'N/A'} | CLI Version: ${context.cliVersion || 'N/A'} | Plugin Version: ${context.pluginVersion || 'N/A'}`) + '\n';
14
+ }
15
+ // Inputs/Outputs section
16
+ if (context.inputs || context.outputs) {
17
+ output += chalk.bold.bgGray.white('\n──────────────────────── Inputs & Outputs ────────────────────────') + '\n';
18
+ if (context.inputs && Object.keys(context.inputs).length > 0) {
19
+ output += chalk.whiteBright('Inputs:') + '\n';
20
+ for (const [k, v] of Object.entries(context.inputs)) {
21
+ output += chalk.gray(` - ${k}: ${v}`) + '\n';
22
+ }
23
+ }
24
+ if (context.outputs && Object.keys(context.outputs).length > 0) {
25
+ output += chalk.whiteBright('Outputs:') + '\n';
26
+ for (const [k, v] of Object.entries(context.outputs)) {
27
+ output += chalk.gray(` - ${k}: ${v}`) + '\n';
28
+ }
29
+ }
30
+ }
31
+ // Technical workflow
32
+ output += chalk.bold.underline(`\n${chalk.cyan('Technical Workflow:')}`) + '\n';
33
+ if (context.explainFlow && Array.isArray(context.explainFlow) && context.explainFlow.length > 0) {
34
+ for (const step of context.explainFlow) {
35
+ output += chalk.greenBright(`• ${step}`) + '\n';
36
+ }
37
+ }
38
+ // Flags used
39
+ output += chalk.bold.underline(`\n${chalk.cyan('Flags Used:')}`) + '\n';
40
+ if (context.usedFlags) {
41
+ const userFlags = Object.entries(context.usedFlags).filter(([_, v]) => v.source === 'user');
42
+ const defaultFlags = Object.entries(context.usedFlags).filter(([_, v]) => v.source === 'default');
43
+ const systemFlags = Object.entries(context.usedFlags).filter(([_, v]) => v.source === 'system');
44
+ if (userFlags.length > 0) {
45
+ output += chalk.bold.bgGray.white('\n──────────────────────────── User Flags ──────────────────────────') + '\n';
46
+ for (const [k, v] of userFlags) {
47
+ let valueStr = (v.value === undefined || Number.isNaN(v.value)) ? 'N/A' : v.value;
48
+ output += chalk.gray(` - ${k}: ${valueStr}`) + '\n';
49
+ }
50
+ }
51
+ if (defaultFlags.length > 0) {
52
+ output += chalk.bold.bgGray.white('\n─────────────────────────── Default Flags ───────────────────────') + '\n';
53
+ for (const [k, v] of defaultFlags) {
54
+ let valueStr = (v.value === undefined || Number.isNaN(v.value)) ? 'N/A' : v.value;
55
+ output += chalk.gray(` - ${k}: ${valueStr}`) + '\n';
56
+ }
57
+ }
58
+ if (systemFlags.length > 0) {
59
+ output += chalk.bold.bgGray.white('\n─────────────────────────── System Flags ────────────────────────') + '\n';
60
+ for (const [k, v] of systemFlags) {
61
+ let valueStr = (v.value === undefined || Number.isNaN(v.value)) ? 'N/A' : v.value;
62
+ output += chalk.gray(` - ${k}: ${valueStr}`) + '\n';
63
+ }
64
+ }
65
+ }
66
+ // Errors and warnings
67
+ if (context.outcome && Array.isArray(context.outcome.errors) && context.outcome.errors.length > 0) {
68
+ output += chalk.redBright.bold('\nErrors:') + '\n';
69
+ for (const err of context.outcome.errors) {
70
+ output += chalk.redBright(` - ${err}`) + '\n';
71
+ }
72
+ }
73
+ if (context.outcome && Array.isArray(context.outcome.warnings) && context.outcome.warnings.length > 0) {
74
+ output += chalk.yellowBright.bold('\nWarnings:') + '\n';
75
+ for (const warn of context.outcome.warnings) {
76
+ output += chalk.yellowBright(` - ${warn}`) + '\n';
77
+ }
78
+ }
79
+ // Developer info
80
+ if (context.technical && typeof context.technical === 'object') {
81
+ output += chalk.bold.bgGray.white('\n──────────────────────── Technical Details ──────────────────────') + '\n';
82
+ for (const [k, v] of Object.entries(context.technical)) {
83
+ let valueStr = (v === undefined || Number.isNaN(v)) ? 'N/A' : v;
84
+ output += chalk.gray(` - ${k}: ${valueStr}`) + '\n';
85
+ }
86
+ }
87
+ if (context.environment && typeof context.environment === 'object') {
88
+ output += chalk.bold.bgGray.white('\n─────────────────────────── Environment ────────────────────────') + '\n';
89
+ output += chalk.bold(` cwd: ${context.environment.cwd ?? 'N/A'}`) + '\n';
90
+ output += chalk.bold(` OS: ${context.environment.os ?? 'N/A'}`) + '\n';
91
+ output += chalk.bold(` Node: ${context.environment.nodeVersion ?? 'N/A'}`) + '\n';
92
+ output += chalk.bold(` Shell: ${context.environment.shell ?? 'N/A'}`) + '\n';
93
+ }
94
+ output += chalk.gray('\nTip: Use --explain for a simple summary.');
95
+ return output.trim();
96
+ }
97
+ //# sourceMappingURL=explainDetailsTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainDetailsTemplate.js","sourceRoot":"","sources":["../../../src/explain/templates/explainDetailsTemplate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ExplainContext } from '../../types/explainTypes.js';
2
+ export declare function explainHumanTemplate(context: ExplainContext): string;
3
+ //# sourceMappingURL=explainHumanTemplate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainHumanTemplate.d.ts","sourceRoot":"","sources":["../../../src/explain/templates/explainHumanTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAyCpE"}
@@ -0,0 +1,41 @@
1
+ import chalk from 'chalk';
2
+ export function explainHumanTemplate(context) {
3
+ let output = '';
4
+ output += chalk.bold.bgBlueBright.white('╔════════════════════════════════════════════════════════════════╗') + '\n';
5
+ output += chalk.bold.bgBlueBright.white('║ EXPLANATION ║') + '\n';
6
+ output += chalk.bold.bgBlueBright.white('╚════════════════════════════════════════════════════════════════╝') + '\n';
7
+ if (context.explainOnly) {
8
+ output += chalk.bgYellow.black(' [EXPLAIN-ONLY MODE: No command will be executed] ') + '\n';
9
+ }
10
+ // Context enrichment (timestamp, user, platform, mode)
11
+ output += chalk.gray(`Timestamp: ${context.timestamp ?? 'N/A'} | User: ${context.user ?? 'N/A'} | Platform: ${context.platform ?? 'N/A'} | Mode: ${context.mode ?? 'N/A'}`) + '\n';
12
+ // Friendly, conversational summary
13
+ if (context.plugin) {
14
+ output += chalk.bold(`This command uses the "${context.plugin}" plugin.`) + '\n';
15
+ }
16
+ // What will happen
17
+ output += chalk.bold.underline(`\nWhat will happen:`) + '\n';
18
+ if (context.decisions && context.decisions.length > 0) {
19
+ for (const d of context.decisions) {
20
+ let valueStr = (d.value === undefined || Number.isNaN(d.value)) ? 'N/A' : d.value;
21
+ output += chalk.green(`• ${d.key} will be set to ${valueStr}`) + '\n';
22
+ }
23
+ }
24
+ else {
25
+ output += chalk.green('• The command will use default settings.') + '\n';
26
+ }
27
+ // Result
28
+ if (context.outcome && context.outcome.result) {
29
+ output += chalk.bold.underline(`\nResult:`) + '\n';
30
+ output += chalk.yellow(`• ${context.outcome.result}`) + '\n';
31
+ if (context.outcome.sideEffects && Array.isArray(context.outcome.sideEffects) && context.outcome.sideEffects.length > 0) {
32
+ for (const s of context.outcome.sideEffects) {
33
+ output += chalk.yellow(`• ${s}`) + '\n';
34
+ }
35
+ }
36
+ }
37
+ // Tip
38
+ output += chalk.gray('\nTip: Use --explain=details for a technical breakdown.');
39
+ return output.trim();
40
+ }
41
+ //# sourceMappingURL=explainHumanTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainHumanTemplate.js","sourceRoot":"","sources":["../../../src/explain/templates/explainHumanTemplate.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { ExplainContext } from '../types/explainTypes.js';
2
- export type ExplainFormat = 'human' | 'details' | 'json';
1
+ import { ExplainContext, ExplainMode } from '../types/explainTypes.js';
3
2
  /**
4
- * Main explain formatter. Returns a string (or JSON) for the given context and format.
3
+ * Main explain formatter. Returns a string (or JSON) for the given context and mode.
5
4
  */
6
- export declare function explainFormatter(context: ExplainContext, format?: ExplainFormat, tense?: 'will' | 'would' | 'did'): string | object;
5
+ export declare function explainFormatter(context: ExplainContext, mode?: ExplainMode): string | object;
7
6
  //# sourceMappingURL=explainFormatter.d.ts.map