@anvil-works/anvil-cli 0.5.13 → 0.5.15

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 (86) hide show
  1. package/dist/CLILogger.d.ts +54 -0
  2. package/dist/CLILogger.d.ts.map +1 -0
  3. package/dist/EditorYaml.d.ts +57 -0
  4. package/dist/EditorYaml.d.ts.map +1 -0
  5. package/dist/Emitter.d.ts +32 -0
  6. package/dist/Emitter.d.ts.map +1 -0
  7. package/dist/SavePathRouter.d.ts +56 -0
  8. package/dist/SavePathRouter.d.ts.map +1 -0
  9. package/dist/WatchSession.d.ts +112 -0
  10. package/dist/WatchSession.d.ts.map +1 -0
  11. package/dist/api.d.ts +35 -0
  12. package/dist/api.d.ts.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +2092 -2092
  16. package/dist/commands/checkout-picker.d.ts +25 -0
  17. package/dist/commands/checkout-picker.d.ts.map +1 -0
  18. package/dist/commands/checkout.d.ts +85 -0
  19. package/dist/commands/checkout.d.ts.map +1 -0
  20. package/dist/commands/config.d.ts +30 -0
  21. package/dist/commands/config.d.ts.map +1 -0
  22. package/dist/commands/configure.d.ts +13 -0
  23. package/dist/commands/configure.d.ts.map +1 -0
  24. package/dist/commands/gitCredential.d.ts +21 -0
  25. package/dist/commands/gitCredential.d.ts.map +1 -0
  26. package/dist/commands/index.d.ts +13 -0
  27. package/dist/commands/index.d.ts.map +1 -0
  28. package/dist/commands/login.d.ts +3 -0
  29. package/dist/commands/login.d.ts.map +1 -0
  30. package/dist/commands/logout.d.ts +5 -0
  31. package/dist/commands/logout.d.ts.map +1 -0
  32. package/dist/commands/version.d.ts +10 -0
  33. package/dist/commands/version.d.ts.map +1 -0
  34. package/dist/commands/watch.d.ts +99 -0
  35. package/dist/commands/watch.d.ts.map +1 -0
  36. package/dist/config.d.ts +56 -0
  37. package/dist/config.d.ts.map +1 -0
  38. package/dist/errors.d.ts +151 -0
  39. package/dist/errors.d.ts.map +1 -0
  40. package/dist/globalConfig.d.ts +23 -0
  41. package/dist/globalConfig.d.ts.map +1 -0
  42. package/dist/index.js +41657 -17604
  43. package/dist/logger.d.ts +67 -0
  44. package/dist/logger.d.ts.map +1 -0
  45. package/dist/oauthHtml.d.ts +3 -0
  46. package/dist/oauthHtml.d.ts.map +1 -0
  47. package/dist/program.d.ts +5 -0
  48. package/dist/program.d.ts.map +1 -0
  49. package/dist/services/anvil-api.d.ts +124 -0
  50. package/dist/services/anvil-api.d.ts.map +1 -0
  51. package/dist/services/auth.d.ts +69 -0
  52. package/dist/services/auth.d.ts.map +1 -0
  53. package/dist/services/git-auth.d.ts +19 -0
  54. package/dist/services/git-auth.d.ts.map +1 -0
  55. package/dist/services/git.d.ts +174 -0
  56. package/dist/services/git.d.ts.map +1 -0
  57. package/dist/services/index.d.ts +9 -0
  58. package/dist/services/index.d.ts.map +1 -0
  59. package/dist/services/keychain.d.ts +9 -0
  60. package/dist/services/keychain.d.ts.map +1 -0
  61. package/dist/services/oauth-login.d.ts +46 -0
  62. package/dist/services/oauth-login.d.ts.map +1 -0
  63. package/dist/services/path-open.d.ts +8 -0
  64. package/dist/services/path-open.d.ts.map +1 -0
  65. package/dist/services/token-store.d.ts +37 -0
  66. package/dist/services/token-store.d.ts.map +1 -0
  67. package/dist/services/validation.d.ts +23 -0
  68. package/dist/services/validation.d.ts.map +1 -0
  69. package/dist/utils.d.ts +34 -0
  70. package/dist/utils.d.ts.map +1 -0
  71. package/dist/validators.d.ts +9 -0
  72. package/dist/validators.d.ts.map +1 -0
  73. package/dist/watch/ConflictResolver.d.ts +54 -0
  74. package/dist/watch/ConflictResolver.d.ts.map +1 -0
  75. package/dist/watch/FileWatcher.d.ts +68 -0
  76. package/dist/watch/FileWatcher.d.ts.map +1 -0
  77. package/dist/watch/SaveProcessor.d.ts +97 -0
  78. package/dist/watch/SaveProcessor.d.ts.map +1 -0
  79. package/dist/watch/SyncManager.d.ts +49 -0
  80. package/dist/watch/SyncManager.d.ts.map +1 -0
  81. package/dist/watch/WebSocketClient.d.ts +98 -0
  82. package/dist/watch/WebSocketClient.d.ts.map +1 -0
  83. package/dist/watch/index.d.ts +33 -0
  84. package/dist/watch/index.d.ts.map +1 -0
  85. package/package.json +15 -2
  86. package/scripts/install/install.sh +4 -2
@@ -0,0 +1,25 @@
1
+ import { listAppsForCheckout } from "../services/anvil-api";
2
+ export interface CheckoutPickerDeps {
3
+ listAppsForCheckout: typeof listAppsForCheckout;
4
+ }
5
+ export interface CheckoutPickerSourceOptions {
6
+ pageSize?: number;
7
+ debounceMs?: number;
8
+ staleTimeMs?: number;
9
+ maxAutoPagesPerCall?: number;
10
+ initialQuery?: string;
11
+ }
12
+ interface CheckoutPickerSourceController {
13
+ source: (term: string | undefined, opt: {
14
+ signal: AbortSignal;
15
+ }) => Promise<Array<{
16
+ value: string;
17
+ name: string;
18
+ description?: string;
19
+ disabled?: boolean;
20
+ }>>;
21
+ }
22
+ export declare function createCheckoutPickerSource(anvilUrl: string, username: string | undefined, deps: CheckoutPickerDeps, options?: CheckoutPickerSourceOptions): CheckoutPickerSourceController;
23
+ export declare function selectAppForCheckout(anvilUrl: string, username: string | undefined, deps: CheckoutPickerDeps, initialQuery?: string): Promise<string | null>;
24
+ export {};
25
+ //# sourceMappingURL=checkout-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout-picker.d.ts","sourceRoot":"","sources":["../../src/commands/checkout-picker.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAIjF,MAAM,WAAW,kBAAkB;IAC/B,mBAAmB,EAAE,OAAO,mBAAmB,CAAC;CACnD;AAWD,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,8BAA8B;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;CACjK;AAyFD,wBAAgB,0BAA0B,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,kBAAkB,EACxB,OAAO,GAAE,2BAAgC,GAC1C,8BAA8B,CAoIhC;AAiUD,wBAAsB,oBAAoB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,IAAI,EAAE,kBAAkB,EACxB,YAAY,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCxB"}
@@ -0,0 +1,85 @@
1
+ import { Command } from "commander";
2
+ import { listAppsForCheckout, validateAppId } from "../services/anvil-api";
3
+ import { getValidAuthToken } from "../services/auth";
4
+ import { hardenCheckoutGitAuth } from "../services/git-auth";
5
+ import { runInteractiveLoginFlow } from "../services/oauth-login";
6
+ import { OpenPathDeps } from "../services/path-open";
7
+ export { createCheckoutPickerSource } from "./checkout-picker";
8
+ export interface ParsedCheckoutInput {
9
+ appId: string;
10
+ detectedUrl?: string;
11
+ }
12
+ /**
13
+ * Options for `executeCheckout()`.
14
+ * These mirror the high-level `anvil checkout` behavior but can be supplied
15
+ * directly by non-CLI callers such as agent or shell integrations.
16
+ */
17
+ export interface CheckoutOptions {
18
+ input?: string;
19
+ directory?: string;
20
+ query?: string;
21
+ url?: string;
22
+ user?: string;
23
+ force?: boolean;
24
+ open?: boolean;
25
+ branch?: string;
26
+ depth?: number;
27
+ singleBranch?: boolean;
28
+ origin?: string;
29
+ quiet?: boolean;
30
+ verbose?: boolean;
31
+ }
32
+ /**
33
+ * Low-level Git clone options used by `executeCheckout()`.
34
+ */
35
+ export interface CheckoutCloneOptions {
36
+ branch?: string;
37
+ depth?: number;
38
+ singleBranch?: boolean;
39
+ origin?: string;
40
+ quiet?: boolean;
41
+ verbose?: boolean;
42
+ }
43
+ /**
44
+ * Dependency injection points for `executeCheckout()`.
45
+ * Override these in tests or when embedding checkout behavior in another host.
46
+ */
47
+ export interface CheckoutExecutionDeps {
48
+ getValidAuthToken: typeof getValidAuthToken;
49
+ validateAppId: typeof validateAppId;
50
+ listAppsForCheckout: typeof listAppsForCheckout;
51
+ runInteractiveLoginFlow: typeof runInteractiveLoginFlow;
52
+ clone: (repoUrl: string, destinationPath: string, options?: CheckoutCloneOptions) => Promise<void>;
53
+ hardenCheckoutGitAuth: typeof hardenCheckoutGitAuth;
54
+ }
55
+ /**
56
+ * Parse checkout input as:
57
+ * - bare app ID
58
+ * - an Anvil git URL (/git/APPID.git)
59
+ * - an editor URL (/.../apps/APPID/...)
60
+ */
61
+ export declare function parseCheckoutInput(input: string): ParsedCheckoutInput;
62
+ export declare function sanitizeDirectoryName(name: string): string;
63
+ export declare function getDefaultDestinationDirectory(appId: string, appName?: string): string;
64
+ export declare function resolveCheckoutUrl(explicitUrl?: string, parsedUrl?: string): Promise<string | null>;
65
+ export declare function isPathInsideGitRepo(targetPath: string): Promise<boolean>;
66
+ export declare function isDirectoryNonEmpty(destinationPath: string): Promise<boolean>;
67
+ export declare function validateCheckoutDestination(destinationPath: string, force?: boolean): Promise<void>;
68
+ /**
69
+ * Resolve a usable auth token for checkout, optionally prompting for login in
70
+ * interactive terminals when no stored token is available.
71
+ */
72
+ export declare function ensureCheckoutAuthToken(anvilUrl: string, username: string | undefined, deps?: CheckoutExecutionDeps): Promise<string>;
73
+ /**
74
+ * Resolve which logged-in account should be used for a checkout operation.
75
+ * Returns `null` when an interactive user explicitly cancels account selection.
76
+ */
77
+ export declare function resolveCheckoutUsername(anvilUrl: string, explicitUsername?: string, getAccounts?: (url: string) => string[]): Promise<string | undefined | null>;
78
+ /**
79
+ * Perform the full `anvil checkout` workflow programmatically.
80
+ * This may prompt in TTY environments when required inputs are omitted.
81
+ */
82
+ export declare function executeCheckout(options: CheckoutOptions, deps?: CheckoutExecutionDeps): Promise<void>;
83
+ export declare function openPathInEditorOrDefault(destinationPath: string, preferredEditorCommand?: string, deps?: OpenPathDeps): Promise<void>;
84
+ export declare function registerCheckoutCommand(program: Command): void;
85
+ //# sourceMappingURL=checkout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/commands/checkout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Command } from "commander";
2
+ interface ConfigResetDeps {
3
+ logout: () => Promise<unknown>;
4
+ resetConfig: () => void;
5
+ }
6
+ export interface ConfigListData {
7
+ anvilUrl: {
8
+ value: string;
9
+ defaultValue: string;
10
+ isDefault: boolean;
11
+ };
12
+ authTokens: {
13
+ totalUrls: number;
14
+ totalAccounts: number;
15
+ accounts: Array<{
16
+ url: string;
17
+ username: string;
18
+ status: "config" | "keychain" | "none";
19
+ }>;
20
+ };
21
+ values: Record<string, unknown>;
22
+ }
23
+ export declare function performConfigReset(deps?: ConfigResetDeps): Promise<void>;
24
+ export declare function performConfigDelete(key: string): {
25
+ existed: boolean;
26
+ };
27
+ export declare function getConfigListData(): ConfigListData;
28
+ export declare function registerConfigCommand(program: Command): void;
29
+ export {};
30
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,UAAU,eAAe;IACrB,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,IAAI,CAAC;CAC3B;AAOD,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,KAAK,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,QAAQ,EAAE,MAAM,CAAC;YACjB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;SAC1C,CAAC,CAAC;KACN,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,GAAE,eAAwC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtG;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAKrE;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CA+ClD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiI5D"}
@@ -0,0 +1,13 @@
1
+ import { Command } from "commander";
2
+ import { logger } from "../logger";
3
+ export interface ConfigureVersionStatus {
4
+ currentVersion: string;
5
+ latestVersion: string | null;
6
+ isOutdated: boolean | null;
7
+ }
8
+ export declare const DEFAULT_ANVIL_SERVER_URL_PROMPT = "Default Anvil server URL";
9
+ export declare const CUSTOM_EDITOR_CHOICE = "__custom_editor_command__";
10
+ export declare function promptForPreferredEditor(currentEditor: string, installedEditors: readonly string[], ui: Pick<typeof logger, "warn" | "info" | "verbose" | "select" | "prompt">): Promise<string>;
11
+ export declare function getConfigureVersionStatus(currentVersion: string, latestVersionGetter?: () => Promise<string | null>): Promise<ConfigureVersionStatus>;
12
+ export declare function registerConfigureCommand(program: Command, version: string): void;
13
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/commands/configure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKnC,MAAM,WAAW,sBAAsB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAcD,eAAO,MAAM,+BAA+B,6BAA6B,CAAC;AAC1E,eAAO,MAAM,oBAAoB,8BAA8B,CAAC;AAShE,wBAAsB,wBAAwB,CAC1C,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,EAAE,EAAE,IAAI,CAAC,OAAO,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAC3E,OAAO,CAAC,MAAM,CAAC,CAiEjB;AAED,wBAAsB,yBAAyB,CAC3C,cAAc,EAAE,MAAM,EACtB,mBAAmB,GAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAoB,GACrE,OAAO,CAAC,sBAAsB,CAAC,CAuBjC;AA2GD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAYhF"}
@@ -0,0 +1,21 @@
1
+ import { Command } from "commander";
2
+ import { getAccountsForUrl, getValidAuthToken } from "../services/auth";
3
+ import { getAppAuthBinding } from "../services/git-auth";
4
+ export interface GitCredentialRequest {
5
+ protocol?: string;
6
+ host?: string;
7
+ path?: string;
8
+ username?: string;
9
+ }
10
+ interface GitCredentialDeps {
11
+ getValidAuthToken: typeof getValidAuthToken;
12
+ getAccountsForUrl: typeof getAccountsForUrl;
13
+ getAppAuthBinding: typeof getAppAuthBinding;
14
+ cwd: () => string;
15
+ }
16
+ export declare function parseGitCredentialRequest(rawInput: string): GitCredentialRequest;
17
+ export declare function buildGitCredentialResponse(operation: string, request: GitCredentialRequest, deps?: GitCredentialDeps): Promise<Record<string, string> | null>;
18
+ export declare function executeGitCredentialOperation(operation: string, deps?: GitCredentialDeps): Promise<void>;
19
+ export declare function registerGitCredentialCommand(program: Command): void;
20
+ export {};
21
+ //# sourceMappingURL=gitCredential.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitCredential.d.ts","sourceRoot":"","sources":["../../src/commands/gitCredential.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAyB,MAAM,sBAAsB,CAAC;AAEhF,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,iBAAiB;IACvB,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,GAAG,EAAE,MAAM,MAAM,CAAC;CACrB;AASD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,CAchF;AAED,wBAAsB,0BAA0B,CAC5C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,EAC7B,IAAI,GAAE,iBAA+B,GACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAmCxC;AAqBD,wBAAsB,6BAA6B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,iBAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3H;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAWnE"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Commands module index.
3
+ * Re-exports all command registration functions.
4
+ */
5
+ export { registerWatchCommand } from "./watch";
6
+ export { registerCheckoutCommand } from "./checkout";
7
+ export { registerGitCredentialCommand } from "./gitCredential";
8
+ export { registerLoginCommand } from "./login";
9
+ export { registerLogoutCommand } from "./logout";
10
+ export { registerConfigCommand } from "./config";
11
+ export { registerVersionCommand } from "./version";
12
+ export { registerConfigureCommand } from "./configure";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerLoginCommand(program: Command): void;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC3D"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ export declare function getTotalLoggedInAccounts(urls: string[]): number;
3
+ export declare function formatMultiAccountLogoutPrompt(totalAccounts: number, urlCount: number): string;
4
+ export declare function registerLogoutCommand(program: Command): void;
5
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAE/D;AAED,wBAAgB,8BAA8B,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK9F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJ5D"}
@@ -0,0 +1,10 @@
1
+ import { Command } from "commander";
2
+ export interface VersionInfo {
3
+ version: string;
4
+ nodeVersion: string;
5
+ platform: string;
6
+ arch: string;
7
+ }
8
+ export declare function getVersionInfo(version: string): VersionInfo;
9
+ export declare function registerVersionCommand(program: Command, version: string): void;
10
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAO3D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAmB9E"}
@@ -0,0 +1,99 @@
1
+ import { Command } from "commander";
2
+ import { WatchSession } from "../WatchSession";
3
+ import { AppIdWithContext } from "../api";
4
+ import { configureCredentialHelperForUrl, setAppAuthBinding } from "../services/git-auth";
5
+ import { OpenPathDeps } from "../services/path-open";
6
+ type FallbackUrlDecision = {
7
+ source: "explicit" | "available-single" | "config" | "default";
8
+ url: string;
9
+ } | {
10
+ source: "available-multiple";
11
+ urls: string[];
12
+ };
13
+ type UsernameDecision = {
14
+ source: "none";
15
+ } | {
16
+ source: "single";
17
+ username: string;
18
+ } | {
19
+ source: "multiple";
20
+ usernames: string[];
21
+ };
22
+ export declare function decideFallbackUrl(explicitUrl?: string, availableUrls?: string[]): FallbackUrlDecision;
23
+ export declare function decideUsernameForUrl(accounts: string[]): UsernameDecision;
24
+ export declare function confirmReverseLookupWithResolvedUser(anvilUrl: string, username?: string): Promise<{
25
+ username?: string;
26
+ shouldContinue: boolean;
27
+ } | null>;
28
+ interface ConfigureWatchGitAuthDeps {
29
+ configureCredentialHelperForUrl: typeof configureCredentialHelperForUrl;
30
+ setAppAuthBinding: typeof setAppAuthBinding;
31
+ }
32
+ interface PushResult {
33
+ success: boolean;
34
+ staleRemote: boolean;
35
+ errorMessage?: string;
36
+ }
37
+ interface SyncStartDeps {
38
+ pushToAnvil: typeof pushToAnvil;
39
+ recreateSessionAndValidate: typeof recreateSessionAndValidate;
40
+ recheckSyncStatus: typeof recheckSyncStatus;
41
+ startWatchingWithEventHandlers: typeof startWatchingWithEventHandlers;
42
+ }
43
+ export declare function resolveWatchOpenPath(repoPath: string): string;
44
+ export declare function openWatchPath(targetPath: string, deps?: OpenPathDeps): Promise<void>;
45
+ export declare function configureWatchGitAuth(options: {
46
+ repoPath: string;
47
+ appId: string;
48
+ anvilUrl: string;
49
+ username?: string;
50
+ }, deps?: ConfigureWatchGitAuthDeps): Promise<void>;
51
+ export declare function isStaleRemotePushError(message: string): boolean;
52
+ export declare function selectAppId(candidates: AppIdWithContext[]): Promise<AppIdWithContext | null>;
53
+ declare function pushToAnvil(options: {
54
+ repoPath: string;
55
+ appId: string;
56
+ anvilUrl: string;
57
+ branchName: string;
58
+ username?: string;
59
+ force?: boolean;
60
+ }): Promise<PushResult>;
61
+ type SyncStateCategory = "in-sync" | "ahead" | "behind" | "diverged" | "branch-missing";
62
+ /**
63
+ * Re-check sync status after a user prompt to detect if things changed while waiting.
64
+ * Returns a fresh session if the state category changed, or null if unchanged.
65
+ */
66
+ declare function recheckSyncStatus(previousCategory: SyncStateCategory, previousBranch: string, options: {
67
+ repoPath: string;
68
+ appId: string;
69
+ anvilUrl: string;
70
+ stagedOnly: boolean;
71
+ username?: string;
72
+ }): Promise<WatchSession | null>;
73
+ declare function recreateSessionAndValidate(options: {
74
+ autoMode: boolean;
75
+ repoPath: string;
76
+ appId: string;
77
+ anvilUrl: string;
78
+ stagedOnly: boolean;
79
+ username?: string;
80
+ }): Promise<boolean>;
81
+ export declare function checkSyncStatusAndStart(session: Pick<WatchSession, "syncStatus" | "hasUncommittedChanges" | "getBranchName" | "cleanup">, options: {
82
+ autoMode: boolean;
83
+ repoPath: string;
84
+ appId: string;
85
+ anvilUrl: string;
86
+ stagedOnly: boolean;
87
+ username?: string;
88
+ }, deps?: SyncStartDeps): Promise<boolean>;
89
+ declare function startWatchingWithEventHandlers(session: WatchSession, options: {
90
+ autoMode: boolean;
91
+ repoPath: string;
92
+ appId: string;
93
+ anvilUrl: string;
94
+ stagedOnly: boolean;
95
+ username?: string;
96
+ }): Promise<void>;
97
+ export declare function registerWatchCommand(program: Command): Command;
98
+ export {};
99
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { setAccountTokens, type AccountTokens } from "./services/token-store";
2
+ export declare const preferredEditors: readonly ["vscode", "cursor", "nvim", "zed", "windsurf", "pycharm"];
3
+ export type PreferredEditor = (typeof preferredEditors)[number];
4
+ declare const settableConfigKeys: readonly ["anvilUrl", "devMode", "verbose", "preferredEditor"];
5
+ export type SettableConfigKey = (typeof settableConfigKeys)[number];
6
+ export declare function isTestMode(): boolean;
7
+ export declare function setConfig(key: string, value: any): void;
8
+ export declare function getConfig(key: string): any;
9
+ /**
10
+ * Delete a config key (removes it from storage).
11
+ * For keys in configDefaults, sets them back to their default value.
12
+ */
13
+ export declare function deleteConfig(key: string): void;
14
+ export declare function resetConfig(): void;
15
+ /**
16
+ * Coerces a string value to the appropriate type based on the config default for that key.
17
+ * Uses valibot for type coercion and validation.
18
+ */
19
+ export declare function coerceConfigValue(key: string, value: string): any;
20
+ export declare function getSettableConfigKeys(): readonly SettableConfigKey[];
21
+ export declare function parseConfigSetValue(key: string, value: string): any;
22
+ export declare function getPreferredEditorCommand(preferredEditorValue: string): string;
23
+ export declare function isCommandAvailable(command: string, env?: NodeJS.ProcessEnv): boolean;
24
+ export declare function getInstalledPreferredEditors(): PreferredEditor[];
25
+ export declare function getAllConfig(): Record<string, any>;
26
+ /**
27
+ * Normalize a URL string to a full URL.
28
+ * Handles cases like:
29
+ * - "anvil.works" -> "https://anvil.works"
30
+ * - "localhost:3000" -> "http://localhost:3000"
31
+ * - "https://anvil.works" -> "https://anvil.works" (unchanged)
32
+ */
33
+ export declare function normalizeAnvilUrl(urlInput: string): string;
34
+ /**
35
+ * Detect Anvil URL and username from git remotes in the repository.
36
+ * Returns the base URL (without /git/APPID.git) and username if found.
37
+ * Uses normalizeAnvilUrl to ensure proper protocol (http for localhost, https for others).
38
+ * SSH URLs may contain URL-encoded usernames (e.g., stu%40anvil.works = stu@anvil.works).
39
+ */
40
+ export declare function detectAnvilUrlFromRemotes(repoPath: string): Promise<{
41
+ url: string;
42
+ username?: string;
43
+ } | null>;
44
+ export { setAccountTokens as setAuthTokensForAccount, type AccountTokens };
45
+ /**
46
+ * Get authentication tokens for a specific URL and username.
47
+ * Returns null if not found (for backward compatibility).
48
+ */
49
+ export declare function getAuthTokensForAccount(url: string, username: string): AccountTokens | null;
50
+ /**
51
+ * Delete authentication tokens for a specific URL and username.
52
+ */
53
+ export declare function deleteAccountTokens(url: string, username: string): void;
54
+ export declare function resolveAnvilUrl(): string;
55
+ export declare function isDevMode(): boolean;
56
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,EAIH,gBAAgB,EAChB,KAAK,aAAa,EACrB,MAAM,wBAAwB,CAAC;AAQhC,eAAO,MAAM,gBAAgB,qEAAsE,CAAC;AACpG,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAWhE,QAAA,MAAM,kBAAkB,gEAAiE,CAAC;AAC1F,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGpE,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAuDD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAEvD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAE1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAa9C;AAED,wBAAgB,WAAW,IAAI,IAAI,CAalC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAiDjE;AAED,wBAAgB,qBAAqB,IAAI,SAAS,iBAAiB,EAAE,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CA2BnE;AAED,wBAAgB,yBAAyB,CAAC,oBAAoB,EAAE,MAAM,GAAG,MAAM,CAS9E;AA+BD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CA0CjG;AAED,wBAAgB,4BAA4B,IAAI,eAAe,EAAE,CAEhE;AAED,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA4B1D;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA8BpH;AAED,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,KAAK,aAAa,EAAE,CAAC;AAE3E;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAK3F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEvE;AAGD,wBAAgB,eAAe,IAAI,MAAM,CAcxC;AAID,wBAAgB,SAAS,IAAI,OAAO,CASnC"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Typed error definitions for anvil-cli.
3
+ * Uses discriminated unions for type-safe error handling.
4
+ */
5
+ export type AuthError = {
6
+ type: "auth_required";
7
+ message?: string;
8
+ } | {
9
+ type: "auth_expired";
10
+ message?: string;
11
+ } | {
12
+ type: "auth_invalid";
13
+ message?: string;
14
+ } | {
15
+ type: "token_refresh_failed";
16
+ message?: string;
17
+ };
18
+ export type AppError = {
19
+ type: "app_not_found";
20
+ appId: string;
21
+ } | {
22
+ type: "app_access_denied";
23
+ appId: string;
24
+ } | {
25
+ type: "app_invalid";
26
+ appId: string;
27
+ reason?: string;
28
+ };
29
+ export type SyncError = {
30
+ type: "branch_not_found";
31
+ branch: string;
32
+ } | {
33
+ type: "branch_diverged";
34
+ behind: number;
35
+ ahead: number;
36
+ } | {
37
+ type: "branch_behind";
38
+ behind: number;
39
+ } | {
40
+ type: "branch_ahead";
41
+ ahead: number;
42
+ } | {
43
+ type: "sync_conflict";
44
+ behind: number;
45
+ ahead: number;
46
+ } | {
47
+ type: "detached_head";
48
+ } | {
49
+ type: "uncommitted_changes";
50
+ files: string[];
51
+ };
52
+ export type GitError = {
53
+ type: "git_not_initialized";
54
+ path: string;
55
+ } | {
56
+ type: "git_command_failed";
57
+ command: string;
58
+ message: string;
59
+ } | {
60
+ type: "git_fetch_failed";
61
+ message: string;
62
+ };
63
+ export type NetworkError = {
64
+ type: "network_error";
65
+ message: string;
66
+ } | {
67
+ type: "server_error";
68
+ status: number;
69
+ message: string;
70
+ } | {
71
+ type: "timeout";
72
+ operation: string;
73
+ };
74
+ export type ValidationError = {
75
+ type: "invalid_anvil_app";
76
+ path: string;
77
+ reason?: string;
78
+ } | {
79
+ type: "missing_anvil_yaml";
80
+ path: string;
81
+ } | {
82
+ type: "invalid_yaml";
83
+ path: string;
84
+ reason?: string;
85
+ };
86
+ export type SaveError = {
87
+ type: "save_conflict";
88
+ latestVersion?: string;
89
+ overtaken?: boolean;
90
+ } | {
91
+ type: "save_validation_failed";
92
+ reason: string;
93
+ currentBranch: string;
94
+ } | {
95
+ type: "no_sync_callback";
96
+ } | {
97
+ type: "max_retries_exceeded";
98
+ retries: number;
99
+ };
100
+ export type AnvilError = AuthError | AppError | SyncError | GitError | NetworkError | ValidationError | SaveError;
101
+ export declare const createAuthError: {
102
+ required: (message?: string) => AuthError;
103
+ expired: (message?: string) => AuthError;
104
+ invalid: (message?: string) => AuthError;
105
+ refreshFailed: (message?: string) => AuthError;
106
+ };
107
+ export declare const createAppError: {
108
+ notFound: (appId: string) => AppError;
109
+ accessDenied: (appId: string) => AppError;
110
+ invalid: (appId: string, reason?: string) => AppError;
111
+ };
112
+ export declare const createSyncError: {
113
+ branchNotFound: (branch: string) => SyncError;
114
+ branchDiverged: (behind: number, ahead: number) => SyncError;
115
+ branchBehind: (behind: number) => SyncError;
116
+ branchAhead: (ahead: number) => SyncError;
117
+ conflict: (behind: number, ahead: number) => SyncError;
118
+ detachedHead: () => SyncError;
119
+ uncommittedChanges: (files: string[]) => SyncError;
120
+ };
121
+ export declare const createGitError: {
122
+ notInitialized: (path: string) => GitError;
123
+ commandFailed: (command: string, message: string) => GitError;
124
+ fetchFailed: (message: string) => GitError;
125
+ };
126
+ export declare const createNetworkError: {
127
+ network: (message: string) => NetworkError;
128
+ server: (status: number, message: string) => NetworkError;
129
+ timeout: (operation: string) => NetworkError;
130
+ };
131
+ export declare const createValidationError: {
132
+ invalidApp: (path: string, reason?: string) => ValidationError;
133
+ missingYaml: (path: string) => ValidationError;
134
+ invalidYaml: (path: string, reason?: string) => ValidationError;
135
+ };
136
+ export declare const createSaveError: {
137
+ conflict: (latestVersion?: string, overtaken?: boolean) => SaveError;
138
+ validationFailed: (reason: string, currentBranch: string) => SaveError;
139
+ noSyncCallback: () => SaveError;
140
+ maxRetriesExceeded: (retries: number) => SaveError;
141
+ };
142
+ export declare function isAnvilError(error: unknown): error is AnvilError;
143
+ export declare function isAuthError(error: AnvilError): error is AuthError;
144
+ export declare function isAppError(error: AnvilError): error is AppError;
145
+ export declare function isSyncError(error: AnvilError): error is SyncError;
146
+ export declare function isGitError(error: AnvilError): error is GitError;
147
+ export declare function isNetworkError(error: AnvilError): error is NetworkError;
148
+ export declare function isValidationError(error: AnvilError): error is ValidationError;
149
+ export declare function isSaveError(error: AnvilError): error is SaveError;
150
+ export declare function getErrorMessage(error: unknown): string;
151
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Global output configuration for anvil-cli.
3
+ *
4
+ * This is a separate module to avoid circular dependencies between
5
+ * cli.ts and logger.ts.
6
+ */
7
+ /**
8
+ * Output mode configuration.
9
+ */
10
+ export interface OutputConfig {
11
+ jsonMode: boolean;
12
+ verbose: boolean;
13
+ }
14
+ /**
15
+ * Set global output configuration.
16
+ * Called after parsing CLI flags.
17
+ */
18
+ export declare function setGlobalOutputConfig(config: Partial<OutputConfig>): void;
19
+ /**
20
+ * Get current global output configuration.
21
+ */
22
+ export declare function getGlobalOutputConfig(): OutputConfig;
23
+ //# sourceMappingURL=globalConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"globalConfig.d.ts","sourceRoot":"","sources":["../src/globalConfig.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAEpD"}