@axtrabase/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +130 -0
  2. package/dist/active-project.d.ts +12 -0
  3. package/dist/active-project.d.ts.map +1 -0
  4. package/dist/active-project.js +27 -0
  5. package/dist/active-project.js.map +1 -0
  6. package/dist/api-types.d.ts +187 -0
  7. package/dist/api-types.d.ts.map +1 -0
  8. package/dist/api-types.js +9 -0
  9. package/dist/api-types.js.map +1 -0
  10. package/dist/commands/config.d.ts +3 -0
  11. package/dist/commands/config.d.ts.map +1 -0
  12. package/dist/commands/config.js +98 -0
  13. package/dist/commands/config.js.map +1 -0
  14. package/dist/commands/connection.d.ts +3 -0
  15. package/dist/commands/connection.d.ts.map +1 -0
  16. package/dist/commands/connection.js +58 -0
  17. package/dist/commands/connection.js.map +1 -0
  18. package/dist/commands/context.d.ts +3 -0
  19. package/dist/commands/context.d.ts.map +1 -0
  20. package/dist/commands/context.js +128 -0
  21. package/dist/commands/context.js.map +1 -0
  22. package/dist/commands/docs.d.ts +11 -0
  23. package/dist/commands/docs.d.ts.map +1 -0
  24. package/dist/commands/docs.js +39 -0
  25. package/dist/commands/docs.js.map +1 -0
  26. package/dist/commands/keys.d.ts +3 -0
  27. package/dist/commands/keys.d.ts.map +1 -0
  28. package/dist/commands/keys.js +92 -0
  29. package/dist/commands/keys.js.map +1 -0
  30. package/dist/commands/login.d.ts +3 -0
  31. package/dist/commands/login.d.ts.map +1 -0
  32. package/dist/commands/login.js +68 -0
  33. package/dist/commands/login.js.map +1 -0
  34. package/dist/commands/logout.d.ts +12 -0
  35. package/dist/commands/logout.d.ts.map +1 -0
  36. package/dist/commands/logout.js +77 -0
  37. package/dist/commands/logout.js.map +1 -0
  38. package/dist/commands/openapi.d.ts +4 -0
  39. package/dist/commands/openapi.d.ts.map +1 -0
  40. package/dist/commands/openapi.js +40 -0
  41. package/dist/commands/openapi.js.map +1 -0
  42. package/dist/commands/organisations.d.ts +3 -0
  43. package/dist/commands/organisations.d.ts.map +1 -0
  44. package/dist/commands/organisations.js +64 -0
  45. package/dist/commands/organisations.js.map +1 -0
  46. package/dist/commands/permissions.d.ts +9 -0
  47. package/dist/commands/permissions.d.ts.map +1 -0
  48. package/dist/commands/permissions.js +61 -0
  49. package/dist/commands/permissions.js.map +1 -0
  50. package/dist/commands/projects.d.ts +3 -0
  51. package/dist/commands/projects.d.ts.map +1 -0
  52. package/dist/commands/projects.js +99 -0
  53. package/dist/commands/projects.js.map +1 -0
  54. package/dist/commands/requests.d.ts +3 -0
  55. package/dist/commands/requests.d.ts.map +1 -0
  56. package/dist/commands/requests.js +91 -0
  57. package/dist/commands/requests.js.map +1 -0
  58. package/dist/commands/schema.d.ts +3 -0
  59. package/dist/commands/schema.d.ts.map +1 -0
  60. package/dist/commands/schema.js +80 -0
  61. package/dist/commands/schema.js.map +1 -0
  62. package/dist/commands/status.d.ts +10 -0
  63. package/dist/commands/status.d.ts.map +1 -0
  64. package/dist/commands/status.js +46 -0
  65. package/dist/commands/status.js.map +1 -0
  66. package/dist/commands/tables.d.ts +3 -0
  67. package/dist/commands/tables.d.ts.map +1 -0
  68. package/dist/commands/tables.js +129 -0
  69. package/dist/commands/tables.js.map +1 -0
  70. package/dist/commands/whoami.d.ts +3 -0
  71. package/dist/commands/whoami.d.ts.map +1 -0
  72. package/dist/commands/whoami.js +41 -0
  73. package/dist/commands/whoami.js.map +1 -0
  74. package/dist/concurrency.d.ts +18 -0
  75. package/dist/concurrency.d.ts.map +1 -0
  76. package/dist/concurrency.js +32 -0
  77. package/dist/concurrency.js.map +1 -0
  78. package/dist/config/credentials.d.ts +17 -0
  79. package/dist/config/credentials.d.ts.map +1 -0
  80. package/dist/config/credentials.js +77 -0
  81. package/dist/config/credentials.js.map +1 -0
  82. package/dist/config/paths.d.ts +12 -0
  83. package/dist/config/paths.d.ts.map +1 -0
  84. package/dist/config/paths.js +20 -0
  85. package/dist/config/paths.js.map +1 -0
  86. package/dist/config/resolve.d.ts +22 -0
  87. package/dist/config/resolve.d.ts.map +1 -0
  88. package/dist/config/resolve.js +41 -0
  89. package/dist/config/resolve.js.map +1 -0
  90. package/dist/config/store.d.ts +24 -0
  91. package/dist/config/store.d.ts.map +1 -0
  92. package/dist/config/store.js +72 -0
  93. package/dist/config/store.js.map +1 -0
  94. package/dist/exit-codes.d.ts +18 -0
  95. package/dist/exit-codes.d.ts.map +1 -0
  96. package/dist/exit-codes.js +40 -0
  97. package/dist/exit-codes.js.map +1 -0
  98. package/dist/generators/typescript.d.ts +5 -0
  99. package/dist/generators/typescript.d.ts.map +1 -0
  100. package/dist/generators/typescript.js +70 -0
  101. package/dist/generators/typescript.js.map +1 -0
  102. package/dist/http/authenticated-client.d.ts +10 -0
  103. package/dist/http/authenticated-client.d.ts.map +1 -0
  104. package/dist/http/authenticated-client.js +24 -0
  105. package/dist/http/authenticated-client.js.map +1 -0
  106. package/dist/http/client.d.ts +42 -0
  107. package/dist/http/client.d.ts.map +1 -0
  108. package/dist/http/client.js +86 -0
  109. package/dist/http/client.js.map +1 -0
  110. package/dist/http/errors.d.ts +29 -0
  111. package/dist/http/errors.d.ts.map +1 -0
  112. package/dist/http/errors.js +21 -0
  113. package/dist/http/errors.js.map +1 -0
  114. package/dist/index.d.ts +3 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +62 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/open-browser.d.ts +9 -0
  119. package/dist/open-browser.d.ts.map +1 -0
  120. package/dist/open-browser.js +32 -0
  121. package/dist/open-browser.js.map +1 -0
  122. package/dist/output/file-writer.d.ts +8 -0
  123. package/dist/output/file-writer.d.ts.map +1 -0
  124. package/dist/output/file-writer.js +28 -0
  125. package/dist/output/file-writer.js.map +1 -0
  126. package/dist/output/print.d.ts +15 -0
  127. package/dist/output/print.d.ts.map +1 -0
  128. package/dist/output/print.js +27 -0
  129. package/dist/output/print.js.map +1 -0
  130. package/dist/output/sanitize.d.ts +30 -0
  131. package/dist/output/sanitize.d.ts.map +1 -0
  132. package/dist/output/sanitize.js +40 -0
  133. package/dist/output/sanitize.js.map +1 -0
  134. package/dist/output/table.d.ts +9 -0
  135. package/dist/output/table.d.ts.map +1 -0
  136. package/dist/output/table.js +19 -0
  137. package/dist/output/table.js.map +1 -0
  138. package/dist/prompt-masked.d.ts +15 -0
  139. package/dist/prompt-masked.d.ts.map +1 -0
  140. package/dist/prompt-masked.js +75 -0
  141. package/dist/prompt-masked.js.map +1 -0
  142. package/dist/report-error.d.ts +18 -0
  143. package/dist/report-error.d.ts.map +1 -0
  144. package/dist/report-error.js +63 -0
  145. package/dist/report-error.js.map +1 -0
  146. package/dist/resolve-entity.d.ts +13 -0
  147. package/dist/resolve-entity.d.ts.map +1 -0
  148. package/dist/resolve-entity.js +18 -0
  149. package/dist/resolve-entity.js.map +1 -0
  150. package/dist/version.d.ts +4 -0
  151. package/dist/version.d.ts.map +1 -0
  152. package/dist/version.js +4 -0
  153. package/dist/version.js.map +1 -0
  154. package/package.json +51 -0
@@ -0,0 +1,75 @@
1
+ import { createInterface } from "node:readline";
2
+ const ENTER_CHARS = new Set(["\n", "\r"]);
3
+ const BACKSPACE_CHARS = new Set([String.fromCharCode(127), "\b"]);
4
+ const CTRL_C = String.fromCharCode(3);
5
+ const CTRL_D = String.fromCharCode(4);
6
+ /**
7
+ * Prompts for a secret on stdin, echoing `*` instead of the typed/pasted
8
+ * characters — used by `axtrabase login` for the pasted CLI token (build
9
+ * brief §5 treats the token as sensitive from the moment it's entered).
10
+ * Falls back to an unmasked `readline` prompt when stdin isn't a TTY (piped
11
+ * input, most test environments) since there's no terminal to mask against
12
+ * and raw mode isn't available there anyway.
13
+ *
14
+ * Control characters (Enter, Backspace, Ctrl-C, Ctrl-D) are matched via
15
+ * `String.fromCharCode` rather than escape-sequence literals in this file's
16
+ * source text — keeps the file plain, diffable ASCII instead of risking
17
+ * literal control bytes ending up embedded in the source.
18
+ */
19
+ export function promptMasked(promptText) {
20
+ if (!process.stdin.isTTY)
21
+ return promptUnmasked(promptText);
22
+ return new Promise((resolve, reject) => {
23
+ const stdin = process.stdin;
24
+ const stdout = process.stdout;
25
+ let value = "";
26
+ stdout.write(promptText);
27
+ stdin.setRawMode(true);
28
+ stdin.resume();
29
+ stdin.setEncoding("utf8");
30
+ const cleanup = () => {
31
+ stdin.setRawMode(false);
32
+ stdin.pause();
33
+ stdin.removeListener("data", onData);
34
+ };
35
+ // A single 'data' event can carry more than one character — a paste
36
+ // arrives as one chunk, not one event per character — so each chunk is
37
+ // walked character by character rather than treated as a single key.
38
+ const onData = (chunk) => {
39
+ for (const char of chunk) {
40
+ if (ENTER_CHARS.has(char)) {
41
+ cleanup();
42
+ stdout.write("\n");
43
+ resolve(value.trim());
44
+ return;
45
+ }
46
+ if (char === CTRL_C || char === CTRL_D) {
47
+ cleanup();
48
+ stdout.write("\n");
49
+ reject(new Error("Prompt cancelled."));
50
+ return;
51
+ }
52
+ if (BACKSPACE_CHARS.has(char)) {
53
+ if (value.length > 0) {
54
+ value = value.slice(0, -1);
55
+ stdout.write("\b \b");
56
+ }
57
+ continue;
58
+ }
59
+ value += char;
60
+ stdout.write("*");
61
+ }
62
+ };
63
+ stdin.on("data", onData);
64
+ });
65
+ }
66
+ function promptUnmasked(promptText) {
67
+ return new Promise((resolve) => {
68
+ const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: false });
69
+ rl.question(promptText, (answer) => {
70
+ rl.close();
71
+ resolve(answer.trim());
72
+ });
73
+ });
74
+ }
75
+ //# sourceMappingURL=prompt-masked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-masked.js","sourceRoot":"","sources":["../src/prompt-masked.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { EXIT_CODES } from "./exit-codes.js";
2
+ export interface ErrorReportOptions {
3
+ json?: boolean;
4
+ /** Prints the error's cause/stack to stderr — still never a raw secret (build brief §24: "redact secrets/tokens"). */
5
+ debug?: boolean;
6
+ }
7
+ /**
8
+ * The one place a caught error becomes CLI output + an exit code (build
9
+ * brief §24). Every command's action calls this from its top-level catch —
10
+ * no stack trace by default, no ANSI in --json, and the mapping from error
11
+ * code to exit code is centralized in exit-codes.ts so it can't drift
12
+ * per-command.
13
+ */
14
+ export declare function reportError(error: unknown, options?: ErrorReportOptions): never;
15
+ /** Wraps a command action so every command doesn't hand-roll the same try/catch; the action itself decides what --json/--debug values to pass through, since only it knows how to read the merged command options. */
16
+ export declare function runWithErrorHandling(action: () => Promise<void>, options: ErrorReportOptions): Promise<void>;
17
+ export { EXIT_CODES };
18
+ //# sourceMappingURL=report-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-error.d.ts","sourceRoot":"","sources":["../src/report-error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AAGnE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sHAAsH;IACtH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,KAAK,CA8BnF;AAeD,sNAAsN;AACtN,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { CliError } from "./http/errors.js";
2
+ import { EXIT_CODES, exitCodeForErrorCode } from "./exit-codes.js";
3
+ import { printJson, printLine } from "./output/print.js";
4
+ /**
5
+ * The one place a caught error becomes CLI output + an exit code (build
6
+ * brief §24). Every command's action calls this from its top-level catch —
7
+ * no stack trace by default, no ANSI in --json, and the mapping from error
8
+ * code to exit code is centralized in exit-codes.ts so it can't drift
9
+ * per-command.
10
+ */
11
+ export function reportError(error, options = {}) {
12
+ const cliError = toCliError(error);
13
+ if (options.json) {
14
+ printJson({
15
+ error: {
16
+ code: cliError.code,
17
+ message: cliError.message,
18
+ ...(cliError.requestId ? { requestId: cliError.requestId } : {})
19
+ }
20
+ });
21
+ }
22
+ else {
23
+ printLine();
24
+ printLine(`Error:`);
25
+ printLine(cliError.message);
26
+ printLine();
27
+ printLine(`Code:`);
28
+ printLine(cliError.code);
29
+ if (cliError.requestId) {
30
+ printLine();
31
+ printLine(`Request ID:`);
32
+ printLine(cliError.requestId);
33
+ }
34
+ }
35
+ if (options.debug && cliError.cause) {
36
+ process.stderr.write(`${describeCause(cliError.cause)}\n`);
37
+ }
38
+ process.exit(exitCodeForErrorCode(cliError.code));
39
+ }
40
+ function toCliError(error) {
41
+ if (error instanceof CliError)
42
+ return error;
43
+ if (error instanceof Error) {
44
+ return new CliError("AXTRA_CLI_UNEXPECTED_ERROR", error.message, { status: 0, cause: error });
45
+ }
46
+ return new CliError("AXTRA_CLI_UNEXPECTED_ERROR", "An unexpected error occurred.", { status: 0 });
47
+ }
48
+ function describeCause(cause) {
49
+ if (cause instanceof Error)
50
+ return cause.stack ?? cause.message;
51
+ return String(cause);
52
+ }
53
+ /** Wraps a command action so every command doesn't hand-roll the same try/catch; the action itself decides what --json/--debug values to pass through, since only it knows how to read the merged command options. */
54
+ export async function runWithErrorHandling(action, options) {
55
+ try {
56
+ await action();
57
+ }
58
+ catch (error) {
59
+ reportError(error, options);
60
+ }
61
+ }
62
+ export { EXIT_CODES };
63
+ //# sourceMappingURL=report-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-error.js","sourceRoot":"","sources":["../src/report-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAQzD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,UAA8B,EAAE;IAC1E,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC;YACR,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5B,SAAS,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,CAAC,CAAC;QACnB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,SAAS,EAAE,CAAC;YACZ,SAAS,CAAC,aAAa,CAAC,CAAC;YACzB,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,KAAK,YAAY,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,QAAQ,CAAC,4BAA4B,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,4BAA4B,EAAE,+BAA+B,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;IAChE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,sNAAsN;AACtN,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA2B,EAC3B,OAA2B;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare function looksLikeUuid(value: string): boolean;
2
+ /**
3
+ * Resolves an `<id-or-slug>` argument (build brief §8/§9: "axtrabase
4
+ * projects use hr-portal" as well as a raw id) against a list already
5
+ * fetched from the control plane — there is no server-side "get by slug"
6
+ * endpoint, so this is a client-side lookup over data the caller already
7
+ * has, not an invented capability.
8
+ */
9
+ export declare function resolveByIdOrSlug<T extends {
10
+ id: string;
11
+ slug: string;
12
+ }>(idOrSlug: string, candidates: T[]): T | undefined;
13
+ //# sourceMappingURL=resolve-entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-entity.d.ts","sourceRoot":"","sources":["../src/resolve-entity.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACtE,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,CAAC,EAAE,GACd,CAAC,GAAG,SAAS,CAKf"}
@@ -0,0 +1,18 @@
1
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
2
+ export function looksLikeUuid(value) {
3
+ return UUID_PATTERN.test(value);
4
+ }
5
+ /**
6
+ * Resolves an `<id-or-slug>` argument (build brief §8/§9: "axtrabase
7
+ * projects use hr-portal" as well as a raw id) against a list already
8
+ * fetched from the control plane — there is no server-side "get by slug"
9
+ * endpoint, so this is a client-side lookup over data the caller already
10
+ * has, not an invented capability.
11
+ */
12
+ export function resolveByIdOrSlug(idOrSlug, candidates) {
13
+ if (looksLikeUuid(idOrSlug)) {
14
+ return candidates.find((candidate) => candidate.id === idOrSlug);
15
+ }
16
+ return candidates.find((candidate) => candidate.slug === idOrSlug);
17
+ }
18
+ //# sourceMappingURL=resolve-entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-entity.js","sourceRoot":"","sources":["../src/resolve-entity.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,iEAAiE,CAAC;AAEvF,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,UAAe;IAEf,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Bump alongside package.json's version — read at runtime for --version and the X-AxtraBase-Client User-Agent, same convention as @axtrabase/sdk's SDK_VERSION. */
2
+ export declare const CLI_VERSION = "0.1.0";
3
+ export declare const CLI_CLIENT_NAME = "axtrabase-cli";
4
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,oKAAoK;AACpK,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,eAAO,MAAM,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Bump alongside package.json's version — read at runtime for --version and the X-AxtraBase-Client User-Agent, same convention as @axtrabase/sdk's SDK_VERSION. */
2
+ export const CLI_VERSION = "0.1.0";
3
+ export const CLI_CLIENT_NAME = "axtrabase-cli";
4
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,oKAAoK;AACpK,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAEnC,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@axtrabase/cli",
3
+ "version": "0.1.0",
4
+ "description": "The AxtraBase CLI — inspect an AxtraBase project's schema, permissions, and environment, and build against it without touching Dataverse directly.",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/erdhem/axtrabase.git",
10
+ "directory": "packages/cli"
11
+ },
12
+ "homepage": "https://github.com/erdhem/axtrabase/tree/main/packages/cli#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/erdhem/axtrabase/issues"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "bin": {
20
+ "axtrabase": "./dist/index.js"
21
+ },
22
+ "exports": {
23
+ ".": {
24
+ "development": "./src/index.ts",
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "default": "./dist/index.js"
28
+ }
29
+ },
30
+ "main": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "files": [
33
+ "dist"
34
+ ],
35
+ "scripts": {
36
+ "build": "tsc -p tsconfig.build.json && chmod +x dist/index.js",
37
+ "typecheck": "tsc -p tsconfig.json --noEmit",
38
+ "test": "vitest run",
39
+ "smoke-test": "bash scripts/pack-install-smoke-test.sh"
40
+ },
41
+ "dependencies": {
42
+ "commander": "^12.1.0"
43
+ },
44
+ "devDependencies": {
45
+ "typescript": "^5.5.3",
46
+ "vitest": "^1.6.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=20.9.0"
50
+ }
51
+ }