@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-document.js","sourceRoot":"","sources":["../../../../source/report/preview-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { bold, dim, green, red, yellow } from 'yoctocolors';
2
+ const ansi = {
3
+ bold: { open: 1, close: 22 },
4
+ dim: { open: 2, close: 22 },
5
+ green: { open: 32, close: 39 },
6
+ red: { open: 31, close: 39 },
7
+ yellow: { open: 33, close: 39 }
8
+ };
9
+ function identity(value) {
10
+ return value;
11
+ }
12
+ function withAnsi(openCode, closeCode) {
13
+ return (value) => {
14
+ return `\u001B[${openCode}m${value}\u001B[${closeCode}m`;
15
+ };
16
+ }
17
+ export function createColors(enabled) {
18
+ if (enabled === false) {
19
+ return { bold: identity, dim: identity, green: identity, red: identity, yellow: identity };
20
+ }
21
+ if (enabled === true) {
22
+ return {
23
+ bold: withAnsi(ansi.bold.open, ansi.bold.close),
24
+ dim: withAnsi(ansi.dim.open, ansi.dim.close),
25
+ green: withAnsi(ansi.green.open, ansi.green.close),
26
+ red: withAnsi(ansi.red.open, ansi.red.close),
27
+ yellow: withAnsi(ansi.yellow.open, ansi.yellow.close)
28
+ };
29
+ }
30
+ return { bold, dim, green, red, yellow };
31
+ }
32
+ export function renderDiffLine(line, colors) {
33
+ if (line.type === 'add') {
34
+ return colors.green(line.text);
35
+ }
36
+ if (line.type === 'remove') {
37
+ return colors.red(line.text);
38
+ }
39
+ return line.text;
40
+ }
41
+ //# sourceMappingURL=terminal-preview-renderer-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-preview-renderer-shared.js","sourceRoot":"","sources":["../../../../source/report/terminal-preview-renderer-shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAW5D,MAAM,IAAI,GAAG;IACT,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5B,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAC9B,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CACzB,CAAC;AAEX,SAAS,QAAQ,CAAC,KAAa;IAC3B,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,SAAiB;IACjD,OAAO,CAAC,KAAK,EAAE,EAAE;QACb,OAAO,UAAU,QAAQ,IAAI,KAAK,UAAU,SAAS,GAAG,CAAC;IAC7D,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAA4B;IACrD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC/F,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;YACH,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC/C,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5C,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAClD,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SACxD,CAAC;IACN,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAqB,EAAE,MAAc;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,94 @@
1
+ /* eslint-disable max-statements, complexity, sonarjs/no-nested-template-literals, unicorn/prefer-single-call, functional/prefer-tacit, @stylistic/max-len, no-continue -- terminal rendering is intentionally linear and string-heavy */
2
+ import { artifactBadgeLabel, artifactStatusLabel } from "./preview-document.js";
3
+ import { collectChangedArtifacts } from "./changed-artifacts.js";
4
+ import { createColors, renderDiffLine } from "./terminal-preview-renderer-shared.js";
5
+ function formatBytes(bytes) {
6
+ return `${bytes} B`;
7
+ }
8
+ function renderArtifactNode(node, colors) {
9
+ const indent = ` ${' '.repeat(node.depth)}`;
10
+ if (node.type === 'directory') {
11
+ return `${indent}${colors.bold(`▸ ${node.name}/`)}`;
12
+ }
13
+ const { artifact } = node;
14
+ const badgeParts = [
15
+ artifactStatusLabel(artifact.status),
16
+ ...artifact.badges.map((badge) => {
17
+ return artifactBadgeLabel(badge);
18
+ })
19
+ ];
20
+ return `${indent}• ${artifact.path} ${colors.dim(`(${artifact.kind}, ${formatBytes(artifact.sizeBytes)})`)} ${colors.yellow(`[${badgeParts.join(', ')}]`)}`.trimEnd();
21
+ }
22
+ function renderPackage(pkg, colors) {
23
+ const lines = [
24
+ `${colors.bold(pkg.name)}${pkg.versionTransition === undefined ? '' : ` ${colors.dim(pkg.versionTransition)}`}`
25
+ ];
26
+ if (pkg.failure !== undefined) {
27
+ lines.push(`${colors.red(' failure')} ${pkg.failure.stage}: ${pkg.failure.message}`);
28
+ }
29
+ lines.push(...pkg.tree.map((node) => {
30
+ return renderArtifactNode(node, colors);
31
+ }));
32
+ if (pkg.eliminatedSourceFiles.length > 0) {
33
+ lines.push(` ${colors.bold('Eliminated source files')}`);
34
+ lines.push(...pkg.eliminatedSourceFiles.map((file) => {
35
+ return ` - ${file.path} ${colors.dim(`(${formatBytes(file.sourceBytes)})`)}`;
36
+ }));
37
+ }
38
+ const changedFiles = collectChangedArtifacts(pkg.tree);
39
+ if (changedFiles.length > 0) {
40
+ lines.push(` ${colors.bold('Diffs')}`);
41
+ for (const artifact of changedFiles) {
42
+ lines.push(` ${artifact.path}`);
43
+ for (const hunk of artifact.diff) {
44
+ lines.push(` ${colors.dim(hunk.header)}`);
45
+ lines.push(...hunk.lines.map((line) => {
46
+ return ` ${renderDiffLine(line, colors)}`;
47
+ }));
48
+ }
49
+ }
50
+ }
51
+ return lines.join('\n');
52
+ }
53
+ export function renderTerminalPreview(document, options = {}) {
54
+ const colors = createColors(options.color);
55
+ const summary = `${document.summary.totalPackages} package(s) · ${document.summary.changedPackages} changed · ${document.summary.failedPackages} failed`;
56
+ const sections = [
57
+ `${colors.bold(document.title)} ${colors.yellow(`[${document.modeLabel}]`)}`,
58
+ colors.dim(summary)
59
+ ];
60
+ if (document.issues.length > 0) {
61
+ sections.push(`${colors.red('Issues')}\n${document.issues
62
+ .map((issue) => {
63
+ return `- ${issue}`;
64
+ })
65
+ .join('\n')}`);
66
+ }
67
+ sections.push(...document.packages.map((pkg) => {
68
+ return renderPackage(pkg, colors);
69
+ }));
70
+ return `${sections.join('\n\n')}\n`;
71
+ }
72
+ export function renderFailureOnlyTerminalPreview(document, options = {}) {
73
+ const colors = createColors(options.color);
74
+ const lines = [`${colors.bold(document.title)} ${colors.yellow(`[${document.modeLabel}]`)}`];
75
+ const headings = {
76
+ config: 'Configuration issues',
77
+ checks: 'Check failures',
78
+ partial: 'Package failures'
79
+ };
80
+ if (document.resultType !== 'success') {
81
+ lines.push(colors.red(headings[document.resultType]));
82
+ }
83
+ lines.push(...document.issues.map((issue) => {
84
+ return `- ${issue}`;
85
+ }));
86
+ for (const pkg of document.packages) {
87
+ if (pkg.failure === undefined) {
88
+ continue;
89
+ }
90
+ lines.push(`${colors.bold(pkg.name)} ${pkg.failure.stage}: ${pkg.failure.message}`);
91
+ }
92
+ return `${lines.join('\n')}\n`;
93
+ }
94
+ //# sourceMappingURL=terminal-preview-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-preview-renderer.js","sourceRoot":"","sources":["../../../../source/report/terminal-preview-renderer.ts"],"names":[],"mappings":"AAAA,yOAAyO;AACzO,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EAGtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAe,MAAM,uCAAuC,CAAC;AAOlG,SAAS,WAAW,CAAC,KAAa;IAC9B,OAAO,GAAG,KAAK,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAyB,EAAE,MAAc;IACjE,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC1B,MAAM,UAAU,GAAG;QACf,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC;QACpC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC;KACL,CAAC;IACF,OAAO,GAAG,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CACvH,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/B,EAAE,CAAC,OAAO,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,GAAmB,EAAE,MAAc;IACtD,MAAM,KAAK,GAAG;QACV,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE;KAClH,CAAC;IACF,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,KAAK,CAAC,IAAI,CACN,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CACL,CAAC;IACF,IAAI,GAAG,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CACN,GAAG,GAAG,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,OAAO,SAAS,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,CAAC,CAAC,CACL,CAAC;IACN,CAAC;IACD,MAAM,YAAY,GAAG,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACxC,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC/C,KAAK,CAAC,IAAI,CACN,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACvB,OAAO,SAAS,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;gBACnD,CAAC,CAAC,CACL,CAAC;YACN,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAyB,EAAE,UAA0C,EAAE;IACzG,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,iBAAiB,QAAQ,CAAC,OAAO,CAAC,eAAe,cAAc,QAAQ,CAAC,OAAO,CAAC,cAAc,SAAS,CAAC;IACzJ,MAAM,QAAQ,GAAG;QACb,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE;QAC5E,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;KACtB,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CACT,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,MAAM;aACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACX,OAAO,KAAK,KAAK,EAAE,CAAC;QACxB,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,EAAE,CACpB,CAAC;IACN,CAAC;IACD,QAAQ,CAAC,IAAI,CACT,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC7B,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC,CACL,CAAC;IACF,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC5C,QAAyB,EACzB,UAA0C,EAAE;IAE5C,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG;QACb,MAAM,EAAE,sBAAsB;QAC9B,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,kBAAkB;KACrB,CAAC;IACX,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CACN,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,OAAO,KAAK,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,CACL,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC5B,SAAS;QACb,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC"}