terse-cli 0.1.43 → 0.1.44

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 (58) hide show
  1. package/dist/commands/deployTheme.d.ts +28 -0
  2. package/dist/commands/deployTheme.d.ts.map +1 -0
  3. package/dist/commands/deployTheme.js +68 -0
  4. package/dist/commands/deployTheme.js.map +1 -0
  5. package/dist/commands/dev.d.ts +3 -0
  6. package/dist/commands/dev.d.ts.map +1 -0
  7. package/dist/commands/dev.js +47 -0
  8. package/dist/commands/dev.js.map +1 -0
  9. package/dist/commands/serve.d.ts +1 -0
  10. package/dist/commands/serve.d.ts.map +1 -0
  11. package/dist/commands/serve.js +2 -0
  12. package/dist/commands/serve.js.map +1 -0
  13. package/dist/commands/terseCliTheme.d.ts +28 -0
  14. package/dist/commands/terseCliTheme.d.ts.map +1 -0
  15. package/dist/commands/terseCliTheme.js +68 -0
  16. package/dist/commands/terseCliTheme.js.map +1 -0
  17. package/dist/nonInteractive.d.ts +4 -2
  18. package/dist/nonInteractive.d.ts.map +1 -1
  19. package/dist/nonInteractive.js +5 -2
  20. package/dist/nonInteractive.js.map +1 -1
  21. package/dist/perf.d.ts +9 -0
  22. package/dist/perf.d.ts.map +1 -0
  23. package/dist/perf.js +59 -0
  24. package/dist/perf.js.map +1 -0
  25. package/dist/providers/codegen.test.d.ts +2 -0
  26. package/dist/providers/codegen.test.d.ts.map +1 -0
  27. package/dist/providers/codegen.test.js +45 -0
  28. package/dist/providers/codegen.test.js.map +1 -0
  29. package/dist/providers/python/PythonProvider.test.d.ts +2 -0
  30. package/dist/providers/python/PythonProvider.test.d.ts.map +1 -0
  31. package/dist/providers/python/PythonProvider.test.js +169 -0
  32. package/dist/providers/python/PythonProvider.test.js.map +1 -0
  33. package/dist/providers/typescript/prepareCodegenData.test.d.ts +2 -0
  34. package/dist/providers/typescript/prepareCodegenData.test.d.ts.map +1 -0
  35. package/dist/providers/typescript/prepareCodegenData.test.js +54 -0
  36. package/dist/providers/typescript/prepareCodegenData.test.js.map +1 -0
  37. package/dist/run.d.ts.map +1 -1
  38. package/dist/run.js +36 -12
  39. package/dist/run.js.map +1 -1
  40. package/dist/sampleEventId.d.ts +0 -4
  41. package/dist/sampleEventId.d.ts.map +1 -1
  42. package/dist/sampleEventId.js +0 -4
  43. package/dist/sampleEventId.js.map +1 -1
  44. package/dist/shared/ToolDisplayUtils.js +1 -1
  45. package/dist/shared/ToolDisplayUtils.js.map +1 -1
  46. package/package.json +3 -3
  47. package/dist/jsonOutput.d.ts +0 -19
  48. package/dist/jsonOutput.d.ts.map +0 -1
  49. package/dist/jsonOutput.js +0 -25
  50. package/dist/jsonOutput.js.map +0 -1
  51. package/dist/replay.d.ts +0 -3
  52. package/dist/replay.d.ts.map +0 -1
  53. package/dist/replay.js +0 -20
  54. package/dist/replay.js.map +0 -1
  55. package/dist/urls.d.ts +0 -3
  56. package/dist/urls.d.ts.map +0 -1
  57. package/dist/urls.js +0 -27
  58. package/dist/urls.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Brand-colored wrappers for @clack/prompts.
3
+ *
4
+ * Clack uses hardcoded named ANSI colors with no theme API. We replicate its
5
+ * chrome here using chalk true-color (24-bit RGB) derived from the design
6
+ * token OKLCH values:
7
+ *
8
+ * primary: oklch(65% .16 155) → rgb(4, 171, 98) teal-green
9
+ * secondary: oklch(65% .12 145) → rgb(93, 162, 96) muted green
10
+ * tertiary: oklch(65% .15 30) → rgb(219, 102, 86) warm orange
11
+ * destructive: oklch(60% .22 25) → rgb(230, 43, 52) red
12
+ */
13
+ export declare const primary: import("chalk").ChalkInstance;
14
+ export declare const secondary: import("chalk").ChalkInstance;
15
+ export declare const tertiary: import("chalk").ChalkInstance;
16
+ export declare const destructive: import("chalk").ChalkInstance;
17
+ /** Pass as the `styleFrame` option to `spinner()`. */
18
+ export declare const spinnerStyle: (frame: string) => string;
19
+ export declare const brandLog: {
20
+ step: (msg: string) => void;
21
+ info: (msg: string) => void;
22
+ warn: (msg: string) => void;
23
+ error: (msg: string) => void;
24
+ };
25
+ export declare function brandIntro(title?: string): void;
26
+ export declare function brandOutro(message?: string): void;
27
+ export declare function brandNote(message: string, title?: string): void;
28
+ //# sourceMappingURL=deployTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployTheme.d.ts","sourceRoot":"","sources":["../../src/commands/deployTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,eAAO,MAAM,OAAO,+BAA+B,CAAA;AACnD,eAAO,MAAM,SAAS,+BAA6B,CAAA;AACnD,eAAO,MAAM,QAAQ,+BAA8B,CAAA;AACnD,eAAO,MAAM,WAAW,+BAA2B,CAAA;AAInD,sDAAsD;AACtD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,WAAmB,CAAA;AAW7D,eAAO,MAAM,QAAQ;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;iBACN,MAAM;CACtB,CAAA;AAUD,wBAAgB,UAAU,CAAC,KAAK,SAAK,QAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAK,QAEtC;AAWD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,QAepD"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Brand-colored wrappers for @clack/prompts.
3
+ *
4
+ * Clack uses hardcoded named ANSI colors with no theme API. We replicate its
5
+ * chrome here using chalk true-color (24-bit RGB) derived from the design
6
+ * token OKLCH values:
7
+ *
8
+ * primary: oklch(65% .16 155) → rgb(4, 171, 98) teal-green
9
+ * secondary: oklch(65% .12 145) → rgb(93, 162, 96) muted green
10
+ * tertiary: oklch(65% .15 30) → rgb(219, 102, 86) warm orange
11
+ * destructive: oklch(60% .22 25) → rgb(230, 43, 52) red
12
+ */
13
+ import { log } from "@clack/prompts";
14
+ import chalk from "chalk";
15
+ // ── Color tokens ──────────────────────────────────────────────────────────────
16
+ export const primary = chalk.rgb(4, 171, 98);
17
+ export const secondary = chalk.rgb(93, 162, 96);
18
+ export const tertiary = chalk.rgb(219, 102, 86);
19
+ export const destructive = chalk.rgb(230, 43, 52);
20
+ // ── Spinner ───────────────────────────────────────────────────────────────────
21
+ /** Pass as the `styleFrame` option to `spinner()`. */
22
+ export const spinnerStyle = (frame) => primary(frame);
23
+ // ── Log helpers ───────────────────────────────────────────────────────────────
24
+ // Clack's log.step / log.info / log.warn / log.error hardcode their symbol
25
+ // colors. We call log.message() directly with a branded symbol instead.
26
+ const S_STEP = "◇";
27
+ const S_INFO = "●";
28
+ const S_WARN = "▲";
29
+ const S_ERROR = "■";
30
+ export const brandLog = {
31
+ step: (msg) => log.message(msg, { symbol: primary(S_STEP) }),
32
+ info: (msg) => log.message(msg, { symbol: secondary(S_INFO) }),
33
+ warn: (msg) => log.message(msg, { symbol: tertiary(S_WARN) }),
34
+ error: (msg) => log.message(msg, { symbol: destructive(S_ERROR) })
35
+ };
36
+ // ── Intro / Outro ─────────────────────────────────────────────────────────────
37
+ // Clack's intro/outro output a gray guide bar. We replicate the same chrome
38
+ // using our secondary color.
39
+ const S_BAR_START = "┌";
40
+ const S_BAR = "│";
41
+ const S_BAR_END = "└";
42
+ export function brandIntro(title = "") {
43
+ process.stdout.write(`${secondary(S_BAR_START)} ${title}\n`);
44
+ }
45
+ export function brandOutro(message = "") {
46
+ process.stdout.write(`${secondary(S_BAR)}\n${secondary(S_BAR_END)} ${message}\n\n`);
47
+ }
48
+ // ── Note ─────────────────────────────────────────────────────────────────────
49
+ // Clack's note() hardcodes green for the title symbol and gray for borders.
50
+ // We replicate the layout using our primary/secondary colors.
51
+ const S_BAR_H = "─";
52
+ const S_CORNER_TR = "╮";
53
+ const S_TEE_L = "├";
54
+ const S_CORNER_BR = "┴";
55
+ export function brandNote(message, title = "") {
56
+ const lines = message.split("\n");
57
+ const width = Math.max(...lines.map(l => l.length), title.length) + 4;
58
+ const pad = (s) => s + " ".repeat(width - s.length - 2);
59
+ const border = S_BAR_H.repeat(width - title.length - 1);
60
+ process.stdout.write([
61
+ `${secondary(S_BAR)}`,
62
+ `${primary(S_STEP)} ${chalk.reset(title)} ${secondary(border + S_CORNER_TR)}`,
63
+ ...lines.map(l => `${secondary(S_BAR)} ${chalk.dim(pad(l))}${secondary(S_BAR)}`),
64
+ `${secondary(S_TEE_L + S_BAR_H.repeat(width + 2) + S_CORNER_BR)}`,
65
+ ""
66
+ ].join("\n"));
67
+ }
68
+ //# sourceMappingURL=deployTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployTheme.js","sourceRoot":"","sources":["../../src/commands/deployTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,iFAAiF;AAEjF,MAAM,CAAC,MAAM,OAAO,GAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAI,GAAG,EAAG,EAAE,CAAC,CAAA;AACnD,MAAM,CAAC,MAAM,SAAS,GAAK,KAAK,CAAC,GAAG,CAAC,EAAE,EAAG,GAAG,EAAG,EAAE,CAAC,CAAA;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAG,EAAE,CAAC,CAAA;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAG,EAAE,EAAG,EAAE,CAAC,CAAA;AAEnD,iFAAiF;AAEjF,sDAAsD;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAE7D,iFAAiF;AACjF,2EAA2E;AAC3E,wEAAwE;AAExE,MAAM,MAAM,GAAI,GAAG,CAAA;AACnB,MAAM,MAAM,GAAI,GAAG,CAAA;AACnB,MAAM,MAAM,GAAI,GAAG,CAAA;AACnB,MAAM,OAAO,GAAG,GAAG,CAAA;AAEnB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,IAAI,EAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACrE,IAAI,EAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;IACvE,IAAI,EAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IACtE,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7E,CAAA;AAED,iFAAiF;AACjF,4EAA4E;AAC5E,6BAA6B;AAE7B,MAAM,WAAW,GAAG,GAAG,CAAA;AACvB,MAAM,KAAK,GAAS,GAAG,CAAA;AACvB,MAAM,SAAS,GAAK,GAAG,CAAA;AAEvB,MAAM,UAAU,UAAU,CAAC,KAAK,GAAG,EAAE;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAO,GAAG,EAAE;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,KAAK,OAAO,MAAM,CAAC,CAAA;AACxF,CAAC;AAED,gFAAgF;AAChF,4EAA4E;AAC5E,8DAA8D;AAE9D,MAAM,OAAO,GAAM,GAAG,CAAA;AACtB,MAAM,WAAW,GAAG,GAAG,CAAA;AACvB,MAAM,OAAO,GAAM,GAAG,CAAA;AACtB,MAAM,WAAW,GAAG,GAAG,CAAA;AAEvB,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,KAAK,GAAG,EAAE;IACjD,MAAM,KAAK,GAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,KAAK,GAAI,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtE,MAAM,GAAG,GAAM,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAEvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB;QACI,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE;QACrB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE;QAC9E,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACjF,GAAG,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,EAAE;QACjE,EAAE;KACL,CAAC,IAAI,CAAC,IAAI,CAAC,CACf,CAAA;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function devLink(repoFlag?: string): void;
2
+ export declare function devUnlink(): void;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AA2CA,wBAAgB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,SAAS,IAAI,IAAI,CAGhC"}
@@ -0,0 +1,47 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import chalk from "chalk";
5
+ /** Walk upward from startDir until packages/terse-cli/package.json and pnpm-workspace.yaml exist. */
6
+ function findTerseMonorepoRoot(startDir) {
7
+ let dir = path.resolve(startDir);
8
+ for (;;) {
9
+ const cliPkg = path.join(dir, "packages", "terse-cli", "package.json");
10
+ const workspace = path.join(dir, "pnpm-workspace.yaml");
11
+ if (fs.existsSync(cliPkg) && fs.existsSync(workspace)) {
12
+ return dir;
13
+ }
14
+ const parent = path.dirname(dir);
15
+ if (parent === dir) {
16
+ return null;
17
+ }
18
+ dir = parent;
19
+ }
20
+ }
21
+ function resolveRepo(repoFlag) {
22
+ const fromFlag = repoFlag?.trim();
23
+ const fromEnv = process.env.TERSE_REPO?.trim();
24
+ const fromWalk = findTerseMonorepoRoot(process.cwd());
25
+ const repo = fromFlag || fromEnv || fromWalk;
26
+ if (!repo) {
27
+ console.error(chalk.red("Could not find Terse monorepo root. Set TERSE_REPO, pass --repo <path>, or run from inside the repo."));
28
+ process.exit(1);
29
+ }
30
+ const resolved = path.resolve(repo);
31
+ const cliPkg = path.join(resolved, "packages", "terse-cli", "package.json");
32
+ if (!fs.existsSync(cliPkg)) {
33
+ console.error(chalk.red(`Not a Terse monorepo (missing packages/terse-cli): ${resolved}`));
34
+ process.exit(1);
35
+ }
36
+ return resolved;
37
+ }
38
+ export function devLink(repoFlag) {
39
+ const repo = resolveRepo(repoFlag);
40
+ console.log(chalk.dim(`Using repo: ${repo}`));
41
+ execFileSync("pnpm", ["run", "install-global"], { cwd: repo, stdio: "inherit" });
42
+ }
43
+ export function devUnlink() {
44
+ execFileSync("npm", ["unlink", "-g", "terse-cli"], { stdio: "inherit" });
45
+ execFileSync("npm", ["unlink", "-g", "terse-sdk"], { stdio: "inherit" });
46
+ }
47
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,qGAAqG;AACrG,SAAS,qBAAqB,CAAC,QAAgB;IAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAChC,SAAS,CAAC;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAA;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACpD,OAAO,GAAG,CAAA;QACd,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,OAAO,IAAI,CAAA;QACf,CAAC;QACD,GAAG,GAAG,MAAM,CAAA;IAChB,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,QAAiB;IAClC,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAA;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAA;IAC9C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IACrD,MAAM,IAAI,GAAG,QAAQ,IAAI,OAAO,IAAI,QAAQ,CAAA;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,CAAC,sGAAsG,CAAC,CACpH,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;IAC3E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IACD,OAAO,QAAQ,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,QAAiB;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7C,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;IACxE,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;AAC5E,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Brand-colored wrappers for @clack/prompts.
3
+ *
4
+ * Clack uses hardcoded named ANSI colors with no theme API. We replicate its
5
+ * chrome here using chalk true-color (24-bit RGB) derived from the design
6
+ * token OKLCH values:
7
+ *
8
+ * primary: oklch(65% .16 155) → rgb(4, 171, 98) teal-green
9
+ * secondary: oklch(65% .12 145) → rgb(93, 162, 96) muted green
10
+ * tertiary: oklch(65% .15 30) → rgb(219, 102, 86) warm orange
11
+ * destructive: oklch(60% .22 25) → rgb(230, 43, 52) red
12
+ */
13
+ export declare const primary: import("chalk").ChalkInstance;
14
+ export declare const secondary: import("chalk").ChalkInstance;
15
+ export declare const tertiary: import("chalk").ChalkInstance;
16
+ export declare const destructive: import("chalk").ChalkInstance;
17
+ /** Pass as the `styleFrame` option to `spinner()`. */
18
+ export declare const spinnerStyle: (frame: string) => string;
19
+ export declare const brandLog: {
20
+ step: (msg: string) => void;
21
+ info: (msg: string) => void;
22
+ warn: (msg: string) => void;
23
+ error: (msg: string) => void;
24
+ };
25
+ export declare function brandIntro(title?: string): void;
26
+ export declare function brandOutro(message?: string): void;
27
+ export declare function brandNote(message: string, title?: string): void;
28
+ //# sourceMappingURL=terseCliTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terseCliTheme.d.ts","sourceRoot":"","sources":["../../src/commands/terseCliTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,eAAO,MAAM,OAAO,+BAA+B,CAAA;AACnD,eAAO,MAAM,SAAS,+BAA6B,CAAA;AACnD,eAAO,MAAM,QAAQ,+BAA8B,CAAA;AACnD,eAAO,MAAM,WAAW,+BAA2B,CAAA;AAInD,sDAAsD;AACtD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,WAAmB,CAAA;AAW7D,eAAO,MAAM,QAAQ;gBACJ,MAAM;gBACN,MAAM;gBACN,MAAM;iBACN,MAAM;CACtB,CAAA;AAUD,wBAAgB,UAAU,CAAC,KAAK,SAAK,QAEpC;AAED,wBAAgB,UAAU,CAAC,OAAO,SAAK,QAEtC;AAWD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,QAepD"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Brand-colored wrappers for @clack/prompts.
3
+ *
4
+ * Clack uses hardcoded named ANSI colors with no theme API. We replicate its
5
+ * chrome here using chalk true-color (24-bit RGB) derived from the design
6
+ * token OKLCH values:
7
+ *
8
+ * primary: oklch(65% .16 155) → rgb(4, 171, 98) teal-green
9
+ * secondary: oklch(65% .12 145) → rgb(93, 162, 96) muted green
10
+ * tertiary: oklch(65% .15 30) → rgb(219, 102, 86) warm orange
11
+ * destructive: oklch(60% .22 25) → rgb(230, 43, 52) red
12
+ */
13
+ import { log } from "@clack/prompts";
14
+ import chalk from "chalk";
15
+ // ── Color tokens ──────────────────────────────────────────────────────────────
16
+ export const primary = chalk.rgb(4, 171, 98);
17
+ export const secondary = chalk.rgb(93, 162, 96);
18
+ export const tertiary = chalk.rgb(219, 102, 86);
19
+ export const destructive = chalk.rgb(230, 43, 52);
20
+ // ── Spinner ───────────────────────────────────────────────────────────────────
21
+ /** Pass as the `styleFrame` option to `spinner()`. */
22
+ export const spinnerStyle = (frame) => primary(frame);
23
+ // ── Log helpers ───────────────────────────────────────────────────────────────
24
+ // Clack's log.step / log.info / log.warn / log.error hardcode their symbol
25
+ // colors. We call log.message() directly with a branded symbol instead.
26
+ const S_STEP = "◇";
27
+ const S_INFO = "●";
28
+ const S_WARN = "▲";
29
+ const S_ERROR = "■";
30
+ export const brandLog = {
31
+ step: (msg) => log.message(msg, { symbol: primary(S_STEP) }),
32
+ info: (msg) => log.message(msg, { symbol: secondary(S_INFO) }),
33
+ warn: (msg) => log.message(msg, { symbol: tertiary(S_WARN) }),
34
+ error: (msg) => log.message(msg, { symbol: destructive(S_ERROR) })
35
+ };
36
+ // ── Intro / Outro ─────────────────────────────────────────────────────────────
37
+ // Clack's intro/outro output a gray guide bar. We replicate the same chrome
38
+ // using our secondary color.
39
+ const S_BAR_START = "┌";
40
+ const S_BAR = "│";
41
+ const S_BAR_END = "└";
42
+ export function brandIntro(title = "") {
43
+ process.stdout.write(`${secondary(S_BAR_START)} ${title}\n`);
44
+ }
45
+ export function brandOutro(message = "") {
46
+ process.stdout.write(`${secondary(S_BAR)}\n${secondary(S_BAR_END)} ${message}\n\n`);
47
+ }
48
+ // ── Note ─────────────────────────────────────────────────────────────────────
49
+ // Clack's note() hardcodes green for the title symbol and gray for borders.
50
+ // We replicate the layout using our primary/secondary colors.
51
+ const S_BAR_H = "─";
52
+ const S_CORNER_TR = "╮";
53
+ const S_TEE_L = "├";
54
+ const S_CORNER_BR = "┴";
55
+ export function brandNote(message, title = "") {
56
+ const lines = message.split("\n");
57
+ const width = Math.max(...lines.map(l => l.length), title.length) + 4;
58
+ const pad = (s) => s + " ".repeat(width - s.length - 2);
59
+ const border = S_BAR_H.repeat(width - title.length - 1);
60
+ process.stdout.write([
61
+ `${secondary(S_BAR)}`,
62
+ `${primary(S_STEP)} ${chalk.reset(title)} ${secondary(border + S_CORNER_TR)}`,
63
+ ...lines.map(l => `${secondary(S_BAR)} ${chalk.dim(pad(l))}${secondary(S_BAR)}`),
64
+ `${secondary(S_TEE_L + S_BAR_H.repeat(width + 2) + S_CORNER_BR)}`,
65
+ ""
66
+ ].join("\n"));
67
+ }
68
+ //# sourceMappingURL=terseCliTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terseCliTheme.js","sourceRoot":"","sources":["../../src/commands/terseCliTheme.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  export type NonInteractiveOpts = {
2
- yes?: boolean;
3
2
  nonInteractive?: boolean;
4
3
  };
5
4
  /**
6
5
  * True when the CLI should avoid any interactive prompt. Honors the explicit
7
6
  * flag first, falls back to TTY detection so subprocess / piped invocations
8
- * behave non-interactively without the caller needing to pass `--yes`.
7
+ * behave non-interactively without the caller needing to pass `--non-interactive`.
9
8
  */
10
9
  export declare function isNonInteractive(opts?: NonInteractiveOpts): boolean;
10
+ /**
11
+ * Supports parsing a series of key=value flags from the CLI.
12
+ */
11
13
  export declare function parseKeyValueFlags(values: string[] | undefined): Record<string, string>;
12
14
  /**
13
15
  * Read a JSON object from stdin and return it as a string map. Used by
@@ -1 +1 @@
1
- {"version":3,"file":"nonInteractive.d.ts","sourceRoot":"","sources":["../src/nonInteractive.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAGnE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUvF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6B3E"}
1
+ {"version":3,"file":"nonInteractive.d.ts","sourceRoot":"","sources":["../src/nonInteractive.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAGnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUvF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA6B3E"}
@@ -2,13 +2,16 @@ import { CliError } from "./cliError.js";
2
2
  /**
3
3
  * True when the CLI should avoid any interactive prompt. Honors the explicit
4
4
  * flag first, falls back to TTY detection so subprocess / piped invocations
5
- * behave non-interactively without the caller needing to pass `--yes`.
5
+ * behave non-interactively without the caller needing to pass `--non-interactive`.
6
6
  */
7
7
  export function isNonInteractive(opts) {
8
- if (opts?.yes || opts?.nonInteractive)
8
+ if (opts?.nonInteractive)
9
9
  return true;
10
10
  return !process.stdin.isTTY || !process.stdout.isTTY;
11
11
  }
12
+ /**
13
+ * Supports parsing a series of key=value flags from the CLI.
14
+ */
12
15
  export function parseKeyValueFlags(values) {
13
16
  const out = {};
14
17
  for (const raw of values ?? []) {
@@ -1 +1 @@
1
- {"version":3,"file":"nonInteractive.js","sourceRoot":"","sources":["../src/nonInteractive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAOxC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACtD,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,cAAc;QAAE,OAAO,IAAI,CAAA;IAClD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA4B;IAC3D,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACV,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,0BAA0B,GAAG,GAAG,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAC3G,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACrC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACvE,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IAEnB,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,iCAAiC,EAAE;YAC1E,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAC3D,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,iCAAiC,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC,CAAA;IAC5H,CAAC;IAED,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;QACrE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC/E,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"nonInteractive.js","sourceRoot":"","sources":["../src/nonInteractive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAMxC;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACtD,IAAI,IAAI,EAAE,cAAc;QAAE,OAAO,IAAI,CAAA;IACrC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAA;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA4B;IAC3D,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACV,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE,0BAA0B,GAAG,GAAG,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAC3G,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACrC,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACvE,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAA;IAEnB,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,iCAAiC,EAAE;YAC1E,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SAC3D,CAAC,CAAA;IACN,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,iCAAiC,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC,CAAA;IAC5H,CAAC;IAED,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAiC,CAAC,EAAE,CAAC;QACrE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAA;QAC/E,CAAC;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC"}
package/dist/perf.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ type PerfAttributes = Record<string, unknown>;
2
+ export declare function enableCliPerfLogging(): void;
3
+ export declare function startCliPerfStep(step: string, attributes?: PerfAttributes): {
4
+ complete: (extra?: PerfAttributes) => void;
5
+ fail: (error: unknown, extra?: PerfAttributes) => void;
6
+ };
7
+ export declare function withCliPerfStep<T>(step: string, attributes: PerfAttributes, fn: () => Promise<T>): Promise<T>;
8
+ export {};
9
+ //# sourceMappingURL=perf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf.d.ts","sourceRoot":"","sources":["../src/perf.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAiC7C,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,cAAmB,GAAG;IAC7E,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,cAAc,KAAK,IAAI,CAAA;IAC1C,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,cAAc,KAAK,IAAI,CAAA;CACzD,CAqBA;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWnH"}
package/dist/perf.js ADDED
@@ -0,0 +1,59 @@
1
+ import chalk from "chalk";
2
+ function isPerfLoggingEnabled() {
3
+ const value = process.env.TERSE_PERF_LOGS;
4
+ if (value === undefined) {
5
+ return false;
6
+ }
7
+ return !["0", "false", "off", "no"].includes(value.toLowerCase());
8
+ }
9
+ function serializeAttributes(attributes) {
10
+ return JSON.stringify(Object.fromEntries(Object.entries(attributes).filter(([, value]) => value !== undefined)), (_key, value) => {
11
+ if (value instanceof Error) {
12
+ return { message: value.message, name: value.name };
13
+ }
14
+ return value;
15
+ });
16
+ }
17
+ function logPerf(step, phase, attributes = {}) {
18
+ if (!isPerfLoggingEnabled()) {
19
+ return;
20
+ }
21
+ console.log(chalk.dim(`[terse:perf] ${serializeAttributes({ step, phase, ...attributes })}`));
22
+ }
23
+ export function enableCliPerfLogging() {
24
+ process.env.TERSE_PERF_LOGS ??= "1";
25
+ }
26
+ export function startCliPerfStep(step, attributes = {}) {
27
+ const start = performance.now();
28
+ logPerf(step, "started", attributes);
29
+ return {
30
+ complete(extra = {}) {
31
+ logPerf(step, "completed", {
32
+ ...attributes,
33
+ ...extra,
34
+ duration_ms: Math.round(performance.now() - start)
35
+ });
36
+ },
37
+ fail(error, extra = {}) {
38
+ logPerf(step, "failed", {
39
+ ...attributes,
40
+ ...extra,
41
+ duration_ms: Math.round(performance.now() - start),
42
+ error: error instanceof Error ? error.message : String(error)
43
+ });
44
+ }
45
+ };
46
+ }
47
+ export async function withCliPerfStep(step, attributes, fn) {
48
+ const timer = startCliPerfStep(step, attributes);
49
+ try {
50
+ const result = await fn();
51
+ timer.complete();
52
+ return result;
53
+ }
54
+ catch (error) {
55
+ timer.fail(error);
56
+ throw error;
57
+ }
58
+ }
59
+ //# sourceMappingURL=perf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perf.js","sourceRoot":"","sources":["../src/perf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codegen.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.test.d.ts","sourceRoot":"","sources":["../../src/providers/codegen.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import { preparePythonTemplateContext } from "./python/preparePythonCodegenData.js";
4
+ import { renderPythonGeneratedCode } from "./python/pythonTemplateEngine.js";
5
+ import { prepareTemplateContext } from "./typescript/prepareCodegenData.js";
6
+ import { renderGeneratedCode } from "./typescript/templateEngine.js";
7
+ function buildCodegenInput() {
8
+ return {
9
+ github: [
10
+ {
11
+ integration: { id: "github_int" },
12
+ repositories: [{ id: 1, name: "terse", owner: "acme", fullName: "acme/terse" }]
13
+ }
14
+ ],
15
+ slack: [{ id: "slack_int", displayName: "Slack", channels: [{ id: "C123", name: "alerts" }] }],
16
+ gmail: [{ id: "gmail_int", displayName: "Gmail" }],
17
+ linear: [{ id: "linear_int", displayName: "Linear", teams: [] }],
18
+ notion: [],
19
+ posthog: [],
20
+ datadog: [],
21
+ launchdarkly: [],
22
+ workos: [{ id: "workos_int", displayName: "WorkOS" }],
23
+ attio: [],
24
+ snowflake: [],
25
+ tools: []
26
+ };
27
+ }
28
+ test("typescript codegen narrows supported trigger helpers", () => {
29
+ const output = renderGeneratedCode(prepareTemplateContext(buildCodegenInput()));
30
+ assert.match(output, /onPRSynchronized\(opts: \{ repo: Repos \}\): TypedTrigger<GitHubPullRequestSynchronizedTriggerEvent>/);
31
+ assert.match(output, /onIssueCreated\(opts\?: \{ projectId\?: string; projectName\?: string \}\): TypedTrigger<LinearIssueCreatedTriggerEvent>/);
32
+ assert.match(output, /onMembershipCreated\(\): TypedTrigger<WorkOSOrganizationMembershipCreatedTriggerEvent>/);
33
+ assert.doesNotMatch(output, /onAppMention/);
34
+ assert.doesNotMatch(output, /onReactionAdded/);
35
+ });
36
+ test("python codegen emits precise trigger helper annotations", () => {
37
+ const output = renderPythonGeneratedCode(preparePythonTemplateContext(buildCodegenInput()));
38
+ assert.match(output, /def on_pr_synchronized\(\*, repo: GitHubRepo\) -> TriggerConfig\[GitHubPullRequestSynchronizedTriggerEvent\]:/);
39
+ assert.match(output, /def on_issue_created\(\*, project_id: str \| None = None, project_name: str \| None = None\) -> TriggerConfig\[LinearIssueCreatedTriggerEvent\]:/);
40
+ assert.match(output, /def on_membership_created\(\) -> TriggerConfig\[WorkOSOrganizationMembershipCreatedTriggerEvent\]:/);
41
+ assert.match(output, /class Webhook:/);
42
+ assert.doesNotMatch(output, /def on_app_mention/);
43
+ assert.doesNotMatch(output, /def on_reaction_added/);
44
+ });
45
+ //# sourceMappingURL=codegen.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.test.js","sourceRoot":"","sources":["../../src/providers/codegen.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAEpE,SAAS,iBAAiB;IACtB,OAAO;QACH,MAAM,EAAE;YACJ;gBACI,WAAW,EAAE,EAAE,EAAE,EAAE,YAAY,EAAS;gBACxC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;aAClF;SACJ;QACD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC9F,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;QAClD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAChE,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACrD,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;KACZ,CAAA;AACL,CAAC;AAED,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAC9D,MAAM,MAAM,GAAG,mBAAmB,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IAE/E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,sGAAsG,CAAC,CAAA;IAC5H,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,0HAA0H,CAAC,CAAA;IAChJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,wFAAwF,CAAC,CAAA;IAC9G,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC3C,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,yBAAyB,CAAC,4BAA4B,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IAE3F,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,+GAA+G,CAAC,CAAA;IACrI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kJAAkJ,CAAC,CAAA;IACxK,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,oGAAoG,CAAC,CAAA;IAC1H,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACtC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACjD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;AACxD,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PythonProvider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PythonProvider.test.d.ts","sourceRoot":"","sources":["../../../src/providers/python/PythonProvider.test.ts"],"names":[],"mappings":""}