@packtory/cli 0.0.8 → 0.0.9

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 (45) hide show
  1. package/command-line-interface/config-loader.js +7 -5
  2. package/command-line-interface/config-loader.js.map +1 -1
  3. package/command-line-interface/one-time-password-prompt.js +29 -0
  4. package/command-line-interface/one-time-password-prompt.js.map +1 -0
  5. package/command-line-interface/preview-io-shared.js +75 -0
  6. package/command-line-interface/preview-io-shared.js.map +1 -0
  7. package/command-line-interface/preview-io.js +15 -0
  8. package/command-line-interface/preview-io.js.map +1 -0
  9. package/command-line-interface/runner.js +211 -76
  10. package/command-line-interface/runner.js.map +1 -1
  11. package/command-line-interface/spinner-boot.entry-point.js +25 -0
  12. package/command-line-interface/spinner-boot.entry-point.js.map +1 -0
  13. package/command-line-interface/spinner-boot.js +9 -0
  14. package/command-line-interface/spinner-boot.js.map +1 -0
  15. package/command-line-interface/spinner-shared-state.js +167 -0
  16. package/command-line-interface/spinner-shared-state.js.map +1 -0
  17. package/command-line-interface/spinner-worker-backend.js +62 -0
  18. package/command-line-interface/spinner-worker-backend.js.map +1 -0
  19. package/command-line-interface/terminal-spinner-renderer.js +21 -15
  20. package/command-line-interface/terminal-spinner-renderer.js.map +1 -1
  21. package/common/typed-diff.js +5 -0
  22. package/common/typed-diff.js.map +1 -0
  23. package/package.json +6 -6
  24. package/packages/command-line-interface/command-line-interface.entry-point.d.ts.map +1 -1
  25. package/packages/command-line-interface/command-line-interface.entry-point.js +61 -7
  26. package/packages/command-line-interface/command-line-interface.entry-point.js.map +1 -1
  27. package/readme.md +33 -1
  28. package/report/changed-artifacts.js +10 -0
  29. package/report/changed-artifacts.js.map +1 -0
  30. package/report/html-escaping.js +9 -0
  31. package/report/html-escaping.js.map +1 -0
  32. package/report/html-renderer.js +337 -0
  33. package/report/html-renderer.js.map +1 -0
  34. package/report/preview-document-diff.js +17 -0
  35. package/report/preview-document-diff.js.map +1 -0
  36. package/report/preview-document-helpers.js +173 -0
  37. package/report/preview-document-helpers.js.map +1 -0
  38. package/report/preview-document-tree.js +13 -0
  39. package/report/preview-document-tree.js.map +1 -0
  40. package/report/preview-document.js +97 -0
  41. package/report/preview-document.js.map +1 -0
  42. package/report/terminal-preview-renderer-shared.js +41 -0
  43. package/report/terminal-preview-renderer-shared.js.map +1 -0
  44. package/report/terminal-preview-renderer.js +94 -0
  45. package/report/terminal-preview-renderer.js.map +1 -0
@@ -1,15 +1,17 @@
1
1
  import path from 'node:path';
2
- import { isReadonlyRecord } from 'effect/Predicate';
3
- import { has } from 'effect/ReadonlyRecord';
2
+ import { isPlainObject } from 'remeda';
4
3
  function isFunction(value) {
5
4
  return typeof value === 'function';
6
5
  }
6
+ function hasOwn(value, key) {
7
+ return Object.hasOwn(value, key);
8
+ }
7
9
  export function createConfigLoader(dependencies) {
8
10
  const { currentWorkingDirectory, importModule } = dependencies;
9
11
  async function importConfigModule() {
10
12
  const configFilePath = path.join(currentWorkingDirectory, 'packtory.config.js');
11
13
  const module = await importModule(configFilePath);
12
- if (!isReadonlyRecord(module)) {
14
+ if (!isPlainObject(module)) {
13
15
  throw new Error('Invalid config file');
14
16
  }
15
17
  return module;
@@ -17,10 +19,10 @@ export function createConfigLoader(dependencies) {
17
19
  return {
18
20
  async load() {
19
21
  const module = await importConfigModule();
20
- if (has(module, 'config')) {
22
+ if (hasOwn(module, 'config')) {
21
23
  return module.config;
22
24
  }
23
- if (has(module, 'buildConfig')) {
25
+ if (hasOwn(module, 'buildConfig')) {
24
26
  const { buildConfig } = module;
25
27
  if (isFunction(buildConfig)) {
26
28
  return buildConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../../source/command-line-interface/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAuB,MAAM,uBAAuB,CAAC;AAajE,SAAS,UAAU,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAAsC;IACrE,MAAM,EAAE,uBAAuB,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;IAE/D,KAAK,UAAU,kBAAkB;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC;QAElD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO;QACH,KAAK,CAAC,IAAI;YACN,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAE1C,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACxB,OAAO,MAAM,CAAC,MAAM,CAAC;YACzB,CAAC;YAED,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;gBAC/B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1B,OAAO,WAAW,EAAE,CAAC;gBACzB,CAAC;gBAED,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC;KACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../../source/command-line-interface/config-loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAavC,SAAS,UAAU,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACvC,CAAC;AAED,SAAS,MAAM,CACX,KAA6C,EAC7C,GAAM;IAEN,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,YAAsC;IACrE,MAAM,EAAE,uBAAuB,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC;IAE/D,KAAK,UAAU,kBAAkB;QAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC;QAElD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO;QACH,KAAK,CAAC,IAAI;YACN,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAE1C,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC3B,OAAO,MAAM,CAAC,MAAM,CAAC;YACzB,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;gBAChC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;gBAC/B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1B,OAAO,WAAW,EAAE,CAAC;gBACzB,CAAC;gBAED,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,29 @@
1
+ const oneTimePasswordPromptTimeoutMs = 90_000;
2
+ export function createOneTimePasswordPrompt(dependencies) {
3
+ const { clock, isInteractiveTerminal, stopSpinner, createInterface } = dependencies;
4
+ return async () => {
5
+ if (!isInteractiveTerminal()) {
6
+ throw new Error('The registry requested a one-time password, but prompting requires an interactive terminal');
7
+ }
8
+ stopSpinner();
9
+ const interfaceInstance = createInterface();
10
+ try {
11
+ const answer = await Promise.race([
12
+ interfaceInstance.question('Registry one-time password: '),
13
+ new Promise((resolve) => {
14
+ clock.setTimeout(() => {
15
+ resolve(undefined);
16
+ }, oneTimePasswordPromptTimeoutMs);
17
+ })
18
+ ]);
19
+ if (typeof answer !== 'string' || answer.trim().length === 0) {
20
+ throw new Error('One-time password input timed out or was empty');
21
+ }
22
+ return answer.trim();
23
+ }
24
+ finally {
25
+ interfaceInstance.close();
26
+ }
27
+ };
28
+ }
29
+ //# sourceMappingURL=one-time-password-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one-time-password-prompt.js","sourceRoot":"","sources":["../../../../source/command-line-interface/one-time-password-prompt.ts"],"names":[],"mappings":"AAgBA,MAAM,8BAA8B,GAAG,MAAM,CAAC;AAE9C,MAAM,UAAU,2BAA2B,CACvC,YAAyD;IAEzD,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;IAEpF,OAAO,KAAK,IAAI,EAAE;QACd,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACX,4FAA4F,CAC/F,CAAC;QACN,CAAC;QAED,WAAW,EAAE,CAAC;QACd,MAAM,iBAAiB,GAAG,eAAe,EAAE,CAAC;QAE5C,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBAC9B,iBAAiB,CAAC,QAAQ,CAAC,8BAA8B,CAAC;gBAC1D,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE;oBAC/B,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE;wBAClB,OAAO,CAAC,SAAS,CAAC,CAAC;oBACvB,CAAC,EAAE,8BAA8B,CAAC,CAAC;gBACvC,CAAC,CAAC;aACL,CAAC,CAAC;YAEH,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;gBAAS,CAAC;YACP,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,75 @@
1
+ /* eslint-disable no-undef -- the NodeJS namespace type is used for portable platform detection */
2
+ import { spawn } from 'node:child_process';
3
+ import path from 'node:path';
4
+ export function defaultSpawnProcess(command, args, options) {
5
+ return spawn(command, Array.from(args), {
6
+ ...options,
7
+ stdio: options.stdio === 'ignore' ? 'ignore' : Array.from(options.stdio)
8
+ });
9
+ }
10
+ export function createPreviewIo(dependencies) {
11
+ const shell = dependencies.shell ?? 'sh';
12
+ async function spawnForCompletion(command, args, content) {
13
+ return new Promise((resolve) => {
14
+ const child = dependencies.spawnProcess(command, args, {
15
+ stdio: ['pipe', 'inherit', 'inherit']
16
+ });
17
+ if (child.stdin === null) {
18
+ resolve(false);
19
+ return;
20
+ }
21
+ child.on('error', () => {
22
+ resolve(false);
23
+ });
24
+ child.on('close', (code) => {
25
+ resolve(code === 0);
26
+ });
27
+ child.stdin.on('error', () => {
28
+ resolve(false);
29
+ });
30
+ child.stdin.end(content);
31
+ });
32
+ }
33
+ async function spawnDetached(options) {
34
+ return new Promise((resolve) => {
35
+ const child = dependencies.spawnProcess(options.command, options.args, {
36
+ detached: true,
37
+ stdio: 'ignore'
38
+ });
39
+ child.on('error', () => {
40
+ resolve(false);
41
+ });
42
+ child.unref();
43
+ queueMicrotask(() => {
44
+ resolve(true);
45
+ });
46
+ });
47
+ }
48
+ return {
49
+ createTemporaryPreviewHtmlPath() {
50
+ return path.join(dependencies.tmpdir(), `packtory-preview-${dependencies.randomUuid()}.html`);
51
+ },
52
+ async pagePreviewOutput(content) {
53
+ if (!dependencies.stdoutIsTTY) {
54
+ return false;
55
+ }
56
+ if (dependencies.pager !== undefined && dependencies.pager !== '') {
57
+ const didPage = await spawnForCompletion(shell, ['-lc', dependencies.pager], content);
58
+ if (didPage) {
59
+ return true;
60
+ }
61
+ }
62
+ return spawnForCompletion(shell, ['-lc', 'less -R'], content);
63
+ },
64
+ async openPreviewFile(filePath) {
65
+ if (dependencies.platform === 'darwin') {
66
+ return spawnDetached({ command: 'open', args: [filePath] });
67
+ }
68
+ if (dependencies.platform === 'win32') {
69
+ return spawnDetached({ command: 'cmd', args: ['/c', 'start', '', filePath] });
70
+ }
71
+ return spawnDetached({ command: 'xdg-open', args: [filePath] });
72
+ }
73
+ };
74
+ }
75
+ //# sourceMappingURL=preview-io-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-io-shared.js","sourceRoot":"","sources":["../../../../source/command-line-interface/preview-io-shared.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAuC7B,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,IAAuB,EAAE,OAAqB;IAC/F,OAAO,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACpC,GAAG,OAAO;QACV,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3E,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,YAAmC;IAC/D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC;IAEzC,KAAK,UAAU,kBAAkB,CAAC,OAAe,EAAE,IAAuB,EAAE,OAAe;QACvF,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE;gBACnD,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;aACxC,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACX,CAAC;YACD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACzB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,UAAU,aAAa,CAAC,OAAkC;QAC3D,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;gBACnE,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ;aAClB,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,OAAO,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,cAAc,CAAC,GAAG,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO;QACH,8BAA8B;YAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,oBAAoB,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClG,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,OAAO;YAC3B,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;gBAChE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtF,IAAI,OAAO,EAAE,CAAC;oBACV,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;YACD,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,QAAQ;YAC1B,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,aAAa,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACpC,OAAO,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,aAAa,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import os from 'node:os';
3
+ import { createPreviewIo, defaultSpawnProcess } from "./preview-io-shared.js";
4
+ export const previewIo = createPreviewIo({
5
+ spawnProcess: defaultSpawnProcess,
6
+ randomUuid: randomUUID,
7
+ tmpdir: os.tmpdir,
8
+ platform: process.platform,
9
+ // eslint-disable-next-line node/no-process-env -- preview pager/open behavior is intentionally driven by the caller environment
10
+ shell: process.env.SHELL,
11
+ // eslint-disable-next-line node/no-process-env -- preview pager/open behavior is intentionally driven by the caller environment
12
+ pager: process.env.PAGER,
13
+ stdoutIsTTY: process.stdout.isTTY
14
+ });
15
+ //# sourceMappingURL=preview-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-io.js","sourceRoot":"","sources":["../../../../source/command-line-interface/preview-io.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAC;IACrC,YAAY,EAAE,mBAAmB;IACjC,UAAU,EAAE,UAAU;IACtB,MAAM,EAAE,EAAE,CAAC,MAAM;IACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,gIAAgI;IAChI,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;IACxB,gIAAgI;IAChI,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,KAAK;IACxB,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;CACpC,CAAC,CAAC"}
@@ -1,102 +1,237 @@
1
- import { command, subcommands, flag, binary, run } from 'cmd-ts';
2
- import kleur from 'kleur';
3
- const errorSymbol = kleur.bold().red('');
4
- const successSymbol = kleur.bold().green('✔');
5
- const warningSymbol = kleur.yellow('⚠');
6
- export function createCommandLineInterfaceRunner(dependencies) {
7
- const { log, packtory, progressBroadcaster, spinnerRenderer, configLoader } = dependencies;
8
- let exitCode = 0;
9
- function printDryRunNote(flags) {
10
- if (flags.noDryRun) {
11
- return;
1
+ /* eslint-disable import/max-dependencies -- the CLI runner orchestrates command parsing, reporting, preview rendering, and progress wiring */
2
+ import { command, subcommands, flag, binary, runSafely } from 'cmd-ts';
3
+ import { bold, red, green, yellow, dim } from 'yoctocolors';
4
+ import { buildPreviewDocument } from "../report/preview-document.js";
5
+ import { renderHtmlReport } from "../report/html-renderer.js";
6
+ import { renderFailureOnlyTerminalPreview, renderTerminalPreview } from "../report/terminal-preview-renderer.js";
7
+ function hasCommandParseError(result) {
8
+ return 'error' in result;
9
+ }
10
+ function getErrorSymbol() {
11
+ return bold(red('✖'));
12
+ }
13
+ function getSuccessSymbol() {
14
+ return bold(green('✔'));
15
+ }
16
+ function getWarningSymbol() {
17
+ return yellow('⚠');
18
+ }
19
+ function printDryRunNote(log, flags) {
20
+ if (flags.noDryRun) {
21
+ return;
22
+ }
23
+ log(`${getWarningSymbol()} ${dim(` Note: dry-run mode was enabled, so there was nothing really published; add the ${bold('--no-dry-run')} flag to disable dry-run mode`)}`);
24
+ }
25
+ function printInvalidConfigErrors(log, issues) {
26
+ const title = `${getErrorSymbol()} The provided config is invalid, there are ${issues.length} issue(s)`;
27
+ const message = `${title}\n\n- ${issues.join('\n- ')}`;
28
+ log(message);
29
+ }
30
+ function printCheckErrors(log, issues) {
31
+ const title = `${getErrorSymbol()} Checks failed, there are ${issues.length} issue(s)`;
32
+ const message = `${title}\n\n- ${issues.join('\n- ')}`;
33
+ log(message);
34
+ }
35
+ function printPartialErrorSummary(log, error) {
36
+ const total = error.succeeded.length + error.failures.length;
37
+ const failureCount = red(String(error.failures.length));
38
+ const successCount = green(String(error.succeeded.length));
39
+ log(`${getErrorSymbol()} ${failureCount} from ${bold(String(total))} package(s) failed; ${successCount} succeeded`);
40
+ }
41
+ function printPublishFailure(log, error) {
42
+ if (error.type === 'config') {
43
+ printInvalidConfigErrors(log, error.issues);
44
+ }
45
+ else if (error.type === 'checks') {
46
+ printCheckErrors(log, error.issues);
47
+ }
48
+ else {
49
+ printPartialErrorSummary(log, error);
50
+ }
51
+ }
52
+ function printSuccessSummary(log, results) {
53
+ log(`${getSuccessSymbol()} Success: all ${results.length} package(s) have been published`);
54
+ }
55
+ function registerProgressListeners(progressBroadcaster, spinnerRenderer) {
56
+ progressBroadcaster.on('scheduled', (payload) => {
57
+ spinnerRenderer.add(payload.packageName, payload.packageName, 'Scheduled …');
58
+ });
59
+ progressBroadcaster.on('error', (payload) => {
60
+ spinnerRenderer.stop(payload.packageName, 'failure', payload.error.message);
61
+ });
62
+ progressBroadcaster.on('done', (payload) => {
63
+ let message = `New version ${payload.version} published`;
64
+ if (payload.status === 'already-published') {
65
+ message = `Nothing has changed, published version ${payload.version} is already up-to-date`;
66
+ }
67
+ if (payload.status === 'initial-version') {
68
+ message = `First version ${payload.version} has been published`;
12
69
  }
13
- log(`${warningSymbol} ${kleur.dim(` Note: dry-run mode was enabled, so there was nothing really published; add the ${kleur.bold('--no-dry-run')} flag to disable dry-run mode`)}`);
70
+ spinnerRenderer.stop(payload.packageName, 'success', message);
71
+ });
72
+ progressBroadcaster.on('building', (payload) => {
73
+ spinnerRenderer.updateMessage(payload.packageName, `Building package with version ${payload.version}`);
74
+ });
75
+ progressBroadcaster.on('rebuilding', (payload) => {
76
+ spinnerRenderer.updateMessage(payload.packageName, `Rebuilding package with version ${payload.version}`);
77
+ });
78
+ }
79
+ const jsonIndentSpaces = 2;
80
+ // eslint-disable-next-line @typescript-eslint/max-params -- report persistence needs shared flags plus build outcome/report data
81
+ async function writeReports(writeReportFile, report, result, flags, dryRun) {
82
+ if (report === undefined) {
83
+ return;
84
+ }
85
+ if (flags.reportJson) {
86
+ await writeReportFile('packtory-report.json', `${JSON.stringify(report, undefined, jsonIndentSpaces)}\n`);
87
+ }
88
+ if (flags.reportHtml) {
89
+ const document = await buildPreviewDocument({ report, result, dryRun });
90
+ await writeReportFile('packtory-report.html', renderHtmlReport(document));
14
91
  }
15
- function printInvalidConfigErrors(issues) {
16
- const title = `${errorSymbol} The provided config is invalid, there are ${issues.length} issue(s)`;
17
- const message = `${title}\n\n- ${issues.join('\n- ')}`;
18
- log(message);
92
+ }
93
+ async function reportOutcome(log, writeReportFile, outcome, flags) {
94
+ let exitCode = 0;
95
+ if (outcome.result.isErr) {
96
+ exitCode = 1;
97
+ printPublishFailure(log, outcome.result.error);
19
98
  }
20
- function printCheckErrors(issues) {
21
- const title = `${errorSymbol} Checks failed, there are ${issues.length} issue(s)`;
22
- const message = `${title}\n\n- ${issues.join('\n- ')}`;
23
- log(message);
99
+ else {
100
+ printSuccessSummary(log, outcome.result.value);
24
101
  }
25
- function printPartialErrorSummary(error) {
26
- const total = error.succeeded.length + error.failures.length;
27
- log(`${errorSymbol} ${kleur.red(error.failures.length)} from ${kleur.bold(total)} package(s) failed; ${kleur.green(error.succeeded.length)} succeeded`);
102
+ await writeReports(writeReportFile, outcome.getReport(), outcome.result, flags, !flags.noDryRun);
103
+ return exitCode;
104
+ }
105
+ async function runPublishHandler(deps) {
106
+ const { log, packtory, spinnerRenderer, configLoader, writeReportFile, flags } = deps;
107
+ const config = await configLoader.load();
108
+ const collectReport = flags.reportJson || flags.reportHtml;
109
+ try {
110
+ const outcome = await packtory.buildAndPublishAll(config, {
111
+ dryRun: !flags.noDryRun,
112
+ collectReport
113
+ });
114
+ spinnerRenderer.stopAll();
115
+ return await reportOutcome(log, writeReportFile, outcome, flags);
28
116
  }
29
- function printPublishFailure(error) {
30
- if (error.type === 'config') {
31
- printInvalidConfigErrors(error.issues);
117
+ finally {
118
+ spinnerRenderer.stopAll();
119
+ printDryRunNote(log, { noDryRun: flags.noDryRun });
120
+ }
121
+ }
122
+ function createEmptyReport() {
123
+ return {
124
+ schemaVersion: 1,
125
+ generatedAt: new Date().toISOString(),
126
+ packages: {},
127
+ aggregate: { crossBundleLinks: [] }
128
+ };
129
+ }
130
+ function isPreviewableResult(result) {
131
+ return result.isOk || (result.error.type === 'partial' && result.error.succeeded.length > 0);
132
+ }
133
+ // eslint-disable-next-line max-statements -- preview handling intentionally coordinates build, render, paging, and opening in one place
134
+ async function runPreviewHandler(deps) {
135
+ const { log, pageOutput, openFile, createTemporaryFilePath, packtory, spinnerRenderer, configLoader, writeReportFile, flags } = deps;
136
+ try {
137
+ const config = await configLoader.load();
138
+ const outcome = await packtory.buildAndPublishAll(config, {
139
+ dryRun: true,
140
+ collectReport: true
141
+ });
142
+ spinnerRenderer.stopAll();
143
+ const report = outcome.getReport() ?? createEmptyReport();
144
+ const document = await buildPreviewDocument({
145
+ report,
146
+ result: outcome.result,
147
+ dryRun: true
148
+ });
149
+ if (flags.open) {
150
+ const filePath = createTemporaryFilePath();
151
+ await writeReportFile(filePath, renderHtmlReport(document));
152
+ const opened = await openFile(filePath);
153
+ if (!opened) {
154
+ log(filePath);
155
+ }
32
156
  }
33
- else if (error.type === 'checks') {
34
- printCheckErrors(error.issues);
157
+ else if (isPreviewableResult(outcome.result)) {
158
+ await pageOutput(renderTerminalPreview(document));
35
159
  }
36
160
  else {
37
- printPartialErrorSummary(error);
161
+ log(renderFailureOnlyTerminalPreview(document).trimEnd());
38
162
  }
163
+ return outcome.result.isErr ? 1 : 0;
164
+ }
165
+ finally {
166
+ spinnerRenderer.stopAll();
39
167
  }
40
- function printSuccessSummary(results) {
41
- log(`${successSymbol} Success: all ${results.length} package(s) have been published`);
168
+ }
169
+ function getParseExitCode(log, result) {
170
+ if (!hasCommandParseError(result)) {
171
+ return undefined;
42
172
  }
173
+ log(result.error.config.message);
174
+ return result.error.config.exitCode;
175
+ }
176
+ export function createCommandLineInterfaceRunner(dependencies) {
177
+ const { log, packtory, progressBroadcaster, spinnerRenderer, configLoader, writeReportFile, pageOutput, openFile, createTemporaryFilePath } = dependencies;
178
+ let exitCode = 0;
179
+ const publishCommandName = 'publish';
180
+ const previewCommandName = 'preview';
43
181
  const baseCommand = subcommands({
44
182
  name: 'packtory',
45
183
  cmds: {
46
- publish: command({
47
- name: 'publish',
184
+ [publishCommandName]: command({
185
+ name: publishCommandName,
48
186
  description: 'Builds and publishes all packages (dry-run enabled by default).',
49
187
  args: {
50
- noDryRun: flag({ long: 'no-dry-run' })
188
+ noDryRun: flag({ long: 'no-dry-run' }),
189
+ reportJson: flag({ long: 'report-json' }),
190
+ reportHtml: flag({ long: 'report-html' })
51
191
  },
52
- async handler({ noDryRun }) {
53
- const config = await configLoader.load();
54
- try {
55
- const result = await packtory.buildAndPublishAll(config, { dryRun: !noDryRun });
56
- spinnerRenderer.stopAll();
57
- if (result.isErr) {
58
- exitCode = 1;
59
- printPublishFailure(result.error);
60
- }
61
- else {
62
- printSuccessSummary(result.value);
63
- }
64
- }
65
- finally {
66
- spinnerRenderer.stopAll();
67
- printDryRunNote({ noDryRun });
68
- }
192
+ async handler({ noDryRun, reportJson, reportHtml }) {
193
+ const handlerExitCode = await runPublishHandler({
194
+ log,
195
+ packtory,
196
+ spinnerRenderer,
197
+ configLoader,
198
+ writeReportFile,
199
+ flags: { noDryRun, reportJson, reportHtml }
200
+ });
201
+ exitCode = handlerExitCode;
202
+ }
203
+ }),
204
+ [previewCommandName]: command({
205
+ name: previewCommandName,
206
+ description: 'Builds all packages in fresh dry-run mode and opens a human preview.',
207
+ args: {
208
+ open: flag({ long: 'open' })
209
+ },
210
+ async handler({ open }) {
211
+ const handlerExitCode = await runPreviewHandler({
212
+ log,
213
+ pageOutput,
214
+ openFile,
215
+ createTemporaryFilePath,
216
+ packtory,
217
+ spinnerRenderer,
218
+ configLoader,
219
+ writeReportFile,
220
+ flags: { open }
221
+ });
222
+ exitCode = handlerExitCode;
69
223
  }
70
224
  })
71
225
  }
72
226
  });
73
227
  return {
74
228
  async run(programArguments) {
75
- progressBroadcaster.on('scheduled', (payload) => {
76
- spinnerRenderer.add(payload.packageName, payload.packageName, 'Scheduled …');
77
- });
78
- progressBroadcaster.on('error', (payload) => {
79
- spinnerRenderer.stop(payload.packageName, 'failure', payload.error.message);
80
- });
81
- progressBroadcaster.on('done', (payload) => {
82
- let message = `New version ${payload.version} published`;
83
- if (payload.status === 'already-published') {
84
- message = `Nothing has changed, published version ${payload.version} is already up-to-date`;
85
- }
86
- if (payload.status === 'initial-version') {
87
- message = `First version ${payload.version} has been published`;
88
- }
89
- spinnerRenderer.stop(payload.packageName, 'success', message);
90
- });
91
- progressBroadcaster.on('building', (payload) => {
92
- spinnerRenderer.updateMessage(payload.packageName, `Building package with version ${payload.version}`);
93
- });
94
- progressBroadcaster.on('rebuilding', (payload) => {
95
- spinnerRenderer.updateMessage(payload.packageName, `Rebuilding package with version ${payload.version}`);
96
- });
97
- const program = binary(baseCommand);
98
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- ok in this case
99
- await run(program, programArguments);
229
+ exitCode = 0;
230
+ registerProgressListeners(progressBroadcaster, spinnerRenderer);
231
+ const parseExitCode = getParseExitCode(log, await runSafely(binary(baseCommand), Array.from(programArguments)));
232
+ if (parseExitCode !== undefined) {
233
+ return parseExitCode;
234
+ }
100
235
  return exitCode;
101
236
  }
102
237
  };
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../source/command-line-interface/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../source/command-line-interface/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { Worker as WorkerThread } from 'node:worker_threads';
4
+ import { bootSpinnerRuntime } from "./spinner-boot.js";
5
+ const bootModulePath = fileURLToPath(import.meta.url);
6
+ const bootModuleExtension = path.extname(bootModulePath);
7
+ const workerModulePath = path.join(path.dirname(bootModulePath), `spinner-worker.entry-point${bootModuleExtension}`);
8
+ const workerExecArgv = bootModuleExtension === '.ts' ? ['--experimental-strip-types', '--enable-source-maps'] : ['--enable-source-maps'];
9
+ function spawnWorker(request) {
10
+ const worker = new WorkerThread(workerModulePath, {
11
+ workerData: {
12
+ buffer: request.buffer,
13
+ slotCount: request.slotCount,
14
+ stdoutFileDescriptor: request.stdoutFileDescriptor
15
+ },
16
+ execArgv: workerExecArgv
17
+ });
18
+ worker.unref();
19
+ }
20
+ export const bootedSpinnerRuntime = bootSpinnerRuntime({
21
+ spawnWorker,
22
+ initialLabel: 'packtory',
23
+ initialMessage: 'Starting …'
24
+ });
25
+ //# sourceMappingURL=spinner-boot.entry-point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-boot.entry-point.js","sourceRoot":"","sources":["../../../../source/command-line-interface/spinner-boot.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,6BAA6B,mBAAmB,EAAE,CAAC,CAAC;AACrH,MAAM,cAAc,GAChB,mBAAmB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAEtH,SAAS,WAAW,CAAC,OAA2B;IAC5C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,gBAAgB,EAAE;QAC9C,UAAU,EAAE;YACR,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SACrD;QACD,QAAQ,EAAE,cAAc;KAC3B,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAmB,kBAAkB,CAAC;IACnE,WAAW;IACX,YAAY,EAAE,UAAU;IACxB,cAAc,EAAE,YAAY;CAC/B,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { createSpinnerRuntime } from "./spinner-worker-backend.js";
2
+ const bootSlotIndex = 0;
3
+ export function bootSpinnerRuntime(options) {
4
+ const runtime = createSpinnerRuntime(options);
5
+ runtime.accessors.writeSlot(bootSlotIndex, 'running', options.initialLabel, options.initialMessage);
6
+ runtime.accessors.bumpSlotGeneration(bootSlotIndex);
7
+ return runtime;
8
+ }
9
+ //# sourceMappingURL=spinner-boot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-boot.js","sourceRoot":"","sources":["../../../../source/command-line-interface/spinner-boot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAmD,MAAM,6BAA6B,CAAC;AAEpH,MAAM,aAAa,GAAG,CAAC,CAAC;AAOxB,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC1D,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACpG,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC;AACnB,CAAC"}