@embeddables/cli 0.9.1 → 0.9.3

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 (47) hide show
  1. package/dist/cli.js +24 -19
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/branch.d.ts.map +1 -1
  4. package/dist/commands/branch.js +19 -5
  5. package/dist/commands/branch.js.map +1 -1
  6. package/dist/commands/build.d.ts.map +1 -1
  7. package/dist/commands/build.js +39 -9
  8. package/dist/commands/build.js.map +1 -1
  9. package/dist/commands/builder-open.d.ts.map +1 -1
  10. package/dist/commands/builder-open.js +4 -0
  11. package/dist/commands/builder-open.js.map +1 -1
  12. package/dist/commands/dev.d.ts.map +1 -1
  13. package/dist/commands/dev.js +56 -30
  14. package/dist/commands/dev.js.map +1 -1
  15. package/dist/commands/experiments-connect.d.ts.map +1 -1
  16. package/dist/commands/experiments-connect.js +11 -1
  17. package/dist/commands/experiments-connect.js.map +1 -1
  18. package/dist/commands/init.d.ts.map +1 -1
  19. package/dist/commands/init.js +9 -0
  20. package/dist/commands/init.js.map +1 -1
  21. package/dist/commands/inspect.d.ts.map +1 -1
  22. package/dist/commands/inspect.js +65 -43
  23. package/dist/commands/inspect.js.map +1 -1
  24. package/dist/commands/login.d.ts.map +1 -1
  25. package/dist/commands/login.js +11 -3
  26. package/dist/commands/login.js.map +1 -1
  27. package/dist/commands/logout.d.ts.map +1 -1
  28. package/dist/commands/logout.js +7 -1
  29. package/dist/commands/logout.js.map +1 -1
  30. package/dist/commands/pull.d.ts.map +1 -1
  31. package/dist/commands/pull.js +62 -30
  32. package/dist/commands/pull.js.map +1 -1
  33. package/dist/commands/save.d.ts.map +1 -1
  34. package/dist/commands/save.js +52 -14
  35. package/dist/commands/save.js.map +1 -1
  36. package/dist/commands/upgrade.d.ts.map +1 -1
  37. package/dist/commands/upgrade.js +20 -2
  38. package/dist/commands/upgrade.js.map +1 -1
  39. package/dist/compiler/errors.d.ts +5 -0
  40. package/dist/compiler/errors.d.ts.map +1 -1
  41. package/dist/compiler/errors.js +75 -11
  42. package/dist/compiler/errors.js.map +1 -1
  43. package/dist/tracing.d.ts +16 -0
  44. package/dist/tracing.d.ts.map +1 -0
  45. package/dist/tracing.js +37 -0
  46. package/dist/tracing.js.map +1 -0
  47. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import fs from 'node:fs';
1
2
  import pc from 'picocolors';
2
3
  export class CompileError extends Error {
3
4
  info;
@@ -7,18 +8,70 @@ export class CompileError extends Error {
7
8
  this.name = 'CompileError';
8
9
  }
9
10
  }
11
+ function generateCodeFrame(file, line, column, contextLines = 2) {
12
+ let source;
13
+ try {
14
+ source = fs.readFileSync(file, 'utf8');
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ const lines = source.split('\n');
20
+ if (line < 1 || line > lines.length)
21
+ return null;
22
+ const start = Math.max(0, line - 1 - contextLines);
23
+ const end = Math.min(lines.length, line + contextLines);
24
+ const gutterWidth = String(end).length;
25
+ const result = [];
26
+ for (let i = start; i < end; i++) {
27
+ const lineNum = i + 1;
28
+ const isErrorLine = lineNum === line;
29
+ const gutter = String(lineNum).padStart(gutterWidth);
30
+ const lineContent = lines[i];
31
+ if (isErrorLine) {
32
+ result.push(` ${pc.red(pc.bold(gutter))} ${pc.dim('│')} ${lineContent}`);
33
+ if (column != null && column >= 0) {
34
+ const caretPadding = ' '.repeat(column);
35
+ result.push(` ${' '.repeat(gutterWidth)} ${pc.dim('│')} ${caretPadding}${pc.red(pc.bold('^'))}`);
36
+ }
37
+ }
38
+ else {
39
+ result.push(` ${pc.dim(gutter)} ${pc.dim('│')} ${pc.dim(lineContent)}`);
40
+ }
41
+ }
42
+ return result.join('\n');
43
+ }
44
+ /**
45
+ * Formats a compile error (or any error) into a visually rich, multi-line
46
+ * string suitable for writing directly to stderr. Includes a code frame
47
+ * with surrounding context when file/line info is available.
48
+ */
10
49
  export function formatError(e) {
11
50
  if (e instanceof CompileError) {
12
- const parts = [];
13
- // File location
14
- if (e.info?.file && e.info?.line != null) {
15
- parts.push(`${pc.cyan(e.info.file)}:${pc.yellow(String(e.info.line))}:${pc.yellow(String(e.info.column ?? 0))}`);
51
+ let message = e.message;
52
+ if (e.info?.line != null) {
53
+ message = message.replace(/\s*\(\d+:\d+\)\s*$/, '');
54
+ }
55
+ const output = [''];
56
+ const messageLines = message.split('\n');
57
+ output.push(` ${pc.red(pc.bold('Error:'))} ${pc.bold(messageLines[0])}`);
58
+ for (let i = 1; i < messageLines.length; i++) {
59
+ output.push(` ${messageLines[i]}`);
60
+ }
61
+ const meta = [];
62
+ if (e.info?.file) {
63
+ let loc = pc.cyan(e.info.file);
64
+ if (e.info.line != null) {
65
+ loc += pc.dim(':') + pc.yellow(String(e.info.line));
66
+ if (e.info.column != null) {
67
+ loc += pc.dim(':') + pc.yellow(String(e.info.column));
68
+ }
69
+ }
70
+ meta.push(loc);
16
71
  }
17
- // Page context
18
72
  if (e.info?.pageKey) {
19
- parts.push(`page: ${pc.magenta(e.info.pageKey)}`);
73
+ meta.push(`page: ${pc.magenta(e.info.pageKey)}`);
20
74
  }
21
- // Component context
22
75
  if (e.info?.componentId || e.info?.componentKey) {
23
76
  const componentParts = [];
24
77
  if (e.info.componentId) {
@@ -27,11 +80,22 @@ export function formatError(e) {
27
80
  if (e.info.componentKey) {
28
81
  componentParts.push(`key=${pc.cyan(e.info.componentKey)}`);
29
82
  }
30
- parts.push(`component (${componentParts.join(', ')})`);
83
+ meta.push(`component(${componentParts.join(', ')})`);
84
+ }
85
+ if (meta.length > 0) {
86
+ output.push(` ${meta.join(pc.dim(' │ '))}`);
87
+ }
88
+ if (e.info?.file && e.info.line != null) {
89
+ const frame = generateCodeFrame(e.info.file, e.info.line, e.info.column);
90
+ if (frame) {
91
+ output.push('');
92
+ output.push(frame);
93
+ }
31
94
  }
32
- const where = parts.length > 0 ? parts.join(' | ') : '';
33
- return `${pc.red('Error')} ${where}\n${e.message}`;
95
+ output.push('');
96
+ return output.join('\n');
34
97
  }
35
- return String(e);
98
+ const message = e instanceof Error ? e.message : String(e);
99
+ return `\n ${pc.red(pc.bold('Error:'))} ${message}\n`;
36
100
  }
37
101
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/compiler/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG5B;IAFT,YACE,OAAe,EACR,IAON;QAED,KAAK,CAAC,OAAO,CAAC,CAAA;QATP,SAAI,GAAJ,IAAI,CAOV;QAGD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,gBAAgB;QAChB,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CACR,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CACpE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAC3B,EAAE,CACJ,CAAA;QACH,CAAC;QAED,eAAe;QACf,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACnD,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;YAChD,MAAM,cAAc,GAAa,EAAE,CAAA;YACnC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YAC1D,CAAC;YACD,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YAC5D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,cAAc,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACxD,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvD,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/compiler/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ type Attributes = Record<string, string | number | boolean>;
2
+ /**
3
+ * Wrap an async function in a Sentry span. Returns the function's result.
4
+ * Use for sub-operations within a command (API calls, compilation, file I/O).
5
+ */
6
+ export declare function withSpan<T>(name: string, op: string, fn: () => Promise<T>, attributes?: Attributes): Promise<T>;
7
+ /**
8
+ * Wrap a CLI command's entire body in a root Sentry span and emit universal metrics:
9
+ * - cli.command.invoked (counter, on start)
10
+ * - cli.command.succeeded (counter, on success)
11
+ * - cli.command.failed (counter, on error)
12
+ * - cli.command.duration (distribution, always)
13
+ */
14
+ export declare function withCommandSpan<T>(command: string, fn: () => Promise<T>): Promise<T>;
15
+ export {};
16
+ //# sourceMappingURL=tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAE3D;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAwB1F"}
@@ -0,0 +1,37 @@
1
+ import * as Sentry from '@sentry/node';
2
+ /**
3
+ * Wrap an async function in a Sentry span. Returns the function's result.
4
+ * Use for sub-operations within a command (API calls, compilation, file I/O).
5
+ */
6
+ export async function withSpan(name, op, fn, attributes) {
7
+ return Sentry.startSpan({ name, op, attributes }, fn);
8
+ }
9
+ /**
10
+ * Wrap a CLI command's entire body in a root Sentry span and emit universal metrics:
11
+ * - cli.command.invoked (counter, on start)
12
+ * - cli.command.succeeded (counter, on success)
13
+ * - cli.command.failed (counter, on error)
14
+ * - cli.command.duration (distribution, always)
15
+ */
16
+ export async function withCommandSpan(command, fn) {
17
+ const attrs = { command };
18
+ Sentry.metrics.count('cli.command.invoked', 1, { attributes: attrs });
19
+ const start = performance.now();
20
+ try {
21
+ const result = await Sentry.startSpan({ name: `cli.${command}`, op: 'cli.command', attributes: attrs }, fn);
22
+ Sentry.metrics.count('cli.command.succeeded', 1, { attributes: attrs });
23
+ return result;
24
+ }
25
+ catch (error) {
26
+ Sentry.metrics.count('cli.command.failed', 1, { attributes: attrs });
27
+ throw error;
28
+ }
29
+ finally {
30
+ const duration = performance.now() - start;
31
+ Sentry.metrics.distribution('cli.command.duration', duration, {
32
+ unit: 'millisecond',
33
+ attributes: attrs,
34
+ });
35
+ }
36
+ }
37
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAItC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,EAAU,EACV,EAAoB,EACpB,UAAuB;IAEvB,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAI,OAAe,EAAE,EAAoB;IAC5E,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,CAAA;IAErC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;IAErE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAE/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,EAAE,IAAI,EAAE,OAAO,OAAO,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,EAChE,EAAE,CACH,CAAA;QACD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QACvE,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QACpE,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QAC1C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,EAAE,QAAQ,EAAE;YAC5D,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAA;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embeddables/cli",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "embeddables": "./bin/embeddables.mjs"