@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,54 @@
1
+ import { Logger } from "./logger";
2
+ export interface CLILoggerOptions {
3
+ verbose?: boolean;
4
+ }
5
+ /**
6
+ * CLI-specific logger implementation with ora spinners and pause/resume.
7
+ * Formats output with chalk colors and symbols.
8
+ * Supports JSON output mode for LLM/scripting consumption.
9
+ */
10
+ export declare class CLILogger implements Logger {
11
+ private paused;
12
+ private spinners;
13
+ private activeProgressKeys;
14
+ private sessionVerbose;
15
+ constructor(options?: CLILoggerOptions);
16
+ private get jsonMode();
17
+ private isVerbose;
18
+ private logJson;
19
+ /**
20
+ * Central logging method that respects pause state and handles active spinners
21
+ */
22
+ private log;
23
+ debug(...args: any[]): void;
24
+ verbose(...args: any[]): void;
25
+ info(...args: any[]): void;
26
+ warn(...args: any[]): void;
27
+ error(...args: any[]): void;
28
+ success(message: string): void;
29
+ progress(key: string, message: string): void;
30
+ progressUpdate(key: string, message: string): void;
31
+ progressEnd(key: string, message?: string): void;
32
+ pause(): void;
33
+ resume(): void;
34
+ /**
35
+ * Set verbose mode for this session (used by --verbose flag)
36
+ */
37
+ setVerbose(value: boolean): void;
38
+ /**
39
+ * Prompt the user with inquirer questions, auto-pausing/resuming output
40
+ */
41
+ prompt<T extends Record<string, any>>(questions: any): Promise<T>;
42
+ /**
43
+ * Convenience method for yes/no confirmation prompts
44
+ */
45
+ confirm(message: string, defaultValue?: boolean): Promise<boolean>;
46
+ /**
47
+ * Convenience method for list selection prompts
48
+ */
49
+ select<T>(message: string, choices: Array<{
50
+ name: string;
51
+ value: T;
52
+ }>, defaultValue?: T): Promise<T>;
53
+ }
54
+ //# sourceMappingURL=CLILogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CLILogger.d.ts","sourceRoot":"","sources":["../src/CLILogger.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAA8B,MAAM,UAAU,CAAC;AAE9D,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;;;GAIG;AACH,qBAAa,SAAU,YAAW,MAAM;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,cAAc,CAAU;gBAEpB,OAAO,GAAE,gBAAqB;IAI1C,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,OAAO;IAUf;;OAEG;IACH,OAAO,CAAC,GAAG;IAoBX,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAU3B,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAU7B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ1B,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ1B,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAQ3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ9B,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA2B5C,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBlD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IA8BhD,KAAK,IAAI,IAAI;IAWb,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIhC;;OAEG;IACG,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IASvE;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAYrE;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAa7G"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Entity types that can be stored in .anvil_editor.yaml
3
+ */
4
+ export type EntityType = "assets" | "forms" | "modules" | "scripts" | "server_modules";
5
+ /**
6
+ * Structure of .anvil_editor.yaml file
7
+ */
8
+ export interface EditorYaml {
9
+ unique_ids: {
10
+ assets?: Record<string, string>;
11
+ forms?: Record<string, string>;
12
+ modules?: Record<string, string>;
13
+ scripts?: Record<string, string>;
14
+ server_modules?: Record<string, string>;
15
+ };
16
+ }
17
+ /**
18
+ * READ-ONLY manager for .anvil_editor.yaml file which stores
19
+ * unique IDs for forms, modules, assets, etc.
20
+ *
21
+ * This file is managed by Anvil and updated via git fetch.
22
+ * We only read from it, never write to it.
23
+ */
24
+ export declare class EditorYamlManager {
25
+ private yamlPath;
26
+ private data;
27
+ constructor(repoPath: string);
28
+ /**
29
+ * Load the .anvil_editor.yaml file (read-only)
30
+ */
31
+ load(): Promise<void>;
32
+ /**
33
+ * Reload the .anvil_editor.yaml file from disk
34
+ * (called after git fetch operations)
35
+ */
36
+ reload(): Promise<void>;
37
+ /**
38
+ * Generate a temporary ID for new items
39
+ * (Anvil will provide the real ID via git)
40
+ */
41
+ generateTempId(): string;
42
+ /**
43
+ * Generate an ID for a new entity (always generates a temp ID)
44
+ * Use this for "add" operations
45
+ */
46
+ generateId(entityType: EntityType, name: string): string;
47
+ /**
48
+ * Get ID for an entity (returns existing ID or null if not found)
49
+ * Use this for "change" operations - returns null when no ID exists
50
+ */
51
+ getId(entityType: EntityType, name: string): string | null;
52
+ /**
53
+ * Check if an entity has an ID in the YAML
54
+ */
55
+ hasId(entityType: EntityType, name: string): boolean;
56
+ }
57
+ //# sourceMappingURL=EditorYaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorYaml.d.ts","sourceRoot":"","sources":["../src/EditorYaml.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,UAAU,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC;CACL;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAa;gBAEb,QAAQ,EAAE,MAAM;IAK5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B;;;OAGG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;;OAGG;IACH,cAAc,IAAI,MAAM;IAMxB;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAIxD;;;OAGG;IACH,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK1D;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;CAGvD"}
@@ -0,0 +1,32 @@
1
+ /** Error handler type for Emitter */
2
+ export type EmitterErrorHandler = (event: string, error: unknown) => void;
3
+ /**
4
+ * Simple event emitter for type-safe event handling
5
+ */
6
+ export declare class Emitter<EventMap extends Record<string, any>> {
7
+ private listeners;
8
+ private onError;
9
+ constructor(onError?: EmitterErrorHandler);
10
+ /**
11
+ * Subscribe to an event
12
+ */
13
+ on<K extends keyof EventMap>(event: K, handler: (data: EventMap[K]) => void): void;
14
+ /**
15
+ * Subscribe to an event once (auto-unsubscribes after first call)
16
+ */
17
+ once<K extends keyof EventMap>(event: K, handler: (data: EventMap[K]) => void): void;
18
+ /**
19
+ * Unsubscribe from an event
20
+ */
21
+ off<K extends keyof EventMap>(event: K, handler: (data: EventMap[K]) => void): void;
22
+ /**
23
+ * Emit an event to all subscribers
24
+ * Handlers are called in a try-catch to prevent one failing handler from affecting others
25
+ */
26
+ protected emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
27
+ /**
28
+ * Remove all listeners for a specific event or all events
29
+ */
30
+ removeAllListeners(event?: keyof EventMap): void;
31
+ }
32
+ //# sourceMappingURL=Emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Emitter.d.ts","sourceRoot":"","sources":["../src/Emitter.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAO1E;;GAEG;AACH,qBAAa,OAAO,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACrD,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,GAAE,mBAAyC;IAI9D;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAOlF;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAQpF;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAOnF;;;OAGG;IACH,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAoB3E;;OAEG;IACH,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,QAAQ,GAAG,IAAI;CAOnD"}
@@ -0,0 +1,56 @@
1
+ import { EditorYamlManager } from "./EditorYaml";
2
+ type SavePath = Array<any>;
3
+ export interface ModuleData {
4
+ name: string;
5
+ code: string;
6
+ is_package: boolean;
7
+ }
8
+ export interface ScriptData {
9
+ name: string;
10
+ code: string;
11
+ }
12
+ export interface FormData {
13
+ class_name: string;
14
+ code: string;
15
+ is_package: boolean;
16
+ }
17
+ export interface AssetData {
18
+ name: string;
19
+ content: string;
20
+ }
21
+ export type ChangeType = "change" | "add" | "unlink" | "rename";
22
+ export type SaveResult = {
23
+ type: "save";
24
+ savePath: SavePath;
25
+ content: any;
26
+ } | {
27
+ type: "ignore";
28
+ reason: string;
29
+ };
30
+ /**
31
+ * Deduplicate form template changes when corresponding code file is also changed
32
+ * Removes form template renames/adds when the corresponding .py file is also being renamed/added
33
+ */
34
+ export declare function deduplicateFormChanges(changes: Array<{
35
+ path: string;
36
+ type: "change" | "add" | "unlink" | "rename";
37
+ from?: string;
38
+ }>): Array<{
39
+ path: string;
40
+ type: "change" | "add" | "unlink" | "rename";
41
+ from?: string;
42
+ }>;
43
+ export declare function routeFileChange(repoPath: string, relativePath: string, changeType: ChangeType, editorYaml: EditorYamlManager, stagedOnly?: boolean, fromPath?: string): Promise<SaveResult | SaveResult[]>;
44
+ /**
45
+ * Handle anvil.yaml changes
46
+ * Returns an array of changed keys to be processed separately
47
+ * @param repoPath - Path to the repository
48
+ * @param previousYaml - Previous state of anvil.yaml for diffing (optional)
49
+ * @returns Array of {key, value} pairs for changed keys
50
+ */
51
+ export declare function getAnvilYamlChanges(repoPath: string, previousYaml?: Record<string, any> | null): Promise<Array<{
52
+ key: string;
53
+ value: any;
54
+ }>>;
55
+ export {};
56
+ //# sourceMappingURL=SavePathRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavePathRouter.d.ts","sourceRoot":"","sources":["../src/SavePathRouter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,cAAc,CAAC;AAMlE,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAG3B,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,QAAQ;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AASD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAgVjH;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9F,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgEtF;AAED,wBAAsB,eAAe,CACjC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,iBAAiB,EAC7B,UAAU,GAAE,OAAe,EAC3B,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAoBpC;AAu2BD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAC1C,OAAO,CAAC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,CAAC,CAAC,CAgE7C"}
@@ -0,0 +1,112 @@
1
+ import { Emitter } from "./Emitter";
2
+ import { type FileChange } from "./watch";
3
+ export interface WatchSessionEvents {
4
+ "branch-changed": {
5
+ oldBranch: string;
6
+ newBranch: string;
7
+ };
8
+ "sync-conflict": {
9
+ retryAttempt: number;
10
+ maxRetries: number;
11
+ reason: string;
12
+ };
13
+ "remote-update": {
14
+ branch: string;
15
+ commitHash: string;
16
+ };
17
+ "validation-failed": {
18
+ reason: string;
19
+ currentBranch: string;
20
+ };
21
+ "save-complete": {
22
+ newCommitId: string;
23
+ fileCount: number;
24
+ };
25
+ "save-started": {
26
+ fileCount: number;
27
+ };
28
+ "save-succeeded": {
29
+ newCommitId: string;
30
+ fileCount: number;
31
+ };
32
+ "save-failed": {
33
+ error: string;
34
+ fileCount: number;
35
+ };
36
+ "max-retries-exceeded": {
37
+ retries: number;
38
+ };
39
+ }
40
+ export declare class WatchSession extends Emitter<WatchSessionEvents> {
41
+ private sessionId;
42
+ private repoPath;
43
+ private appId;
44
+ private anvilUrl;
45
+ private authToken;
46
+ private username?;
47
+ private editSession;
48
+ private isPausedForUserInput;
49
+ private isCleanedUp;
50
+ private gitService;
51
+ private currentBranch;
52
+ private commitId;
53
+ private editorYaml;
54
+ private lastBranchChangeTime;
55
+ syncStatus?: {
56
+ behind?: number;
57
+ ahead?: number;
58
+ upstreamRef?: string;
59
+ diverged?: boolean;
60
+ branchMissing?: boolean;
61
+ };
62
+ hasUncommittedChanges?: boolean;
63
+ private fileWatcher;
64
+ private wsClient;
65
+ private saveProcessor;
66
+ private syncManager;
67
+ private localChangePollTimer;
68
+ private isPollingLocalChanges;
69
+ private lastLocalStatusFingerprint;
70
+ private readonly BRANCH_CHANGE_SETTLE_MS;
71
+ private readonly LOCAL_CHANGE_POLL_MS;
72
+ private stagedOnly;
73
+ constructor(repoPath: string, appId: string, options: {
74
+ anvilUrl: string;
75
+ authToken: string;
76
+ currentBranch: string;
77
+ commitId: string;
78
+ stagedOnly?: boolean;
79
+ username?: string;
80
+ });
81
+ getBranchName(): string;
82
+ pauseForUserInput(): void;
83
+ resumeAfterUserInput(): void;
84
+ initialize(): Promise<void>;
85
+ private initializeProcessors;
86
+ private connectWebSocket;
87
+ /**
88
+ * Sync remote changes from Anvil.
89
+ * @throws {AuthError | GitError} on failure
90
+ */
91
+ syncRemoteChanges(knownLocalChanges?: Set<string>): Promise<{
92
+ localOnlyChanges: FileChange[];
93
+ conflicts: FileChange[];
94
+ }>;
95
+ cleanup(): void;
96
+ startWatching(): Promise<void>;
97
+ private initializeLocalChangeFingerprint;
98
+ private startLocalChangeFallbackPolling;
99
+ private pollForMissedLocalChanges;
100
+ private getLocalStatusFingerprint;
101
+ private handleFileChange;
102
+ private isSettlePeriodOver;
103
+ private getRemainingSettleTime;
104
+ /**
105
+ * Force save all pending changes.
106
+ * @throws {SaveError | AuthError | GitError | NetworkError} on failure
107
+ */
108
+ forceSave(): Promise<void>;
109
+ private getSuccessMessage;
110
+ private handlePythonification;
111
+ }
112
+ //# sourceMappingURL=WatchSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WatchSession.d.ts","sourceRoot":"","sources":["../src/WatchSession.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAA4D,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpG,MAAM,WAAW,kBAAkB;IAC/B,gBAAgB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,eAAe,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,eAAe,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,mBAAmB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,cAAc,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,sBAAsB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,qBAAa,YAAa,SAAQ,OAAO,CAAC,kBAAkB,CAAC;IACzD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,oBAAoB,CAAK;IAE1B,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACpH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEvC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,oBAAoB,CAA+B;IAC3D,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,0BAA0B,CAAuB;IAEzD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,UAAU,CAAU;gBAGxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB;IAmBE,aAAa,IAAI,MAAM;IAIvB,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,OAAO,CAAC,oBAAoB;YA6Dd,gBAAgB;IAuC9B;;;OAGG;IACU,iBAAiB,CAC1B,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAChC,OAAO,CAAC;QAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC;QAAC,SAAS,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAIvE,OAAO,IAAI,IAAI;IAwBT,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YAwCtB,gCAAgC;IAa9C,OAAO,CAAC,+BAA+B;YAUzB,yBAAyB;IA6BvC,OAAO,CAAC,yBAAyB;YAgBnB,gBAAgB;IAsB9B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,sBAAsB;IAI9B;;;OAGG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YAOlB,iBAAiB;YAajB,qBAAqB;CAsCtC"}
package/dist/api.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ import { WatchSession } from "./WatchSession";
2
+ import { AuthError, GitError } from "./errors";
3
+ import { ValidationServiceError } from "./services/validation";
4
+ export { AppIdCandidate, AppIdWithContext, CheckoutAppListItem, detectAppIdsByCommitLookup, detectAppIdsFromAllRemotes, filterCandidates, formatCandidateLabel, getGitFetchUrl, getGitPushUrl, getLatestVersion, getWebSocketUrl, listAppsForCheckout, lookupRemoteInfoForAppId, lookupByCommit, saveUpdates, ValidateAppIdResponse, validateAppId, } from "./services/anvil-api";
5
+ export { getAccountsForUrl, getAvailableAnvilUrls, getTokensForUrl, getValidAuthToken, hasTokensForUrl, login, LoginResult, LogoutResult, logout, StoredTokens, TokenData, verifyAuth, } from "./services/auth";
6
+ export { DeviceAuthorizationResponse, OAuthTokenResponse, pollDeviceAuthorization, requestDeviceAuthorization, runInteractiveLoginFlow, } from "./services/oauth-login";
7
+ export { CheckoutCloneOptions, CheckoutExecutionDeps, CheckoutOptions, ensureCheckoutAuthToken, executeCheckout, getDefaultDestinationDirectory, isDirectoryNonEmpty, isPathInsideGitRepo, openPathInEditorOrDefault, parseCheckoutInput, ParsedCheckoutInput, resolveCheckoutUrl, resolveCheckoutUsername, sanitizeDirectoryName, validateCheckoutDestination, } from "./commands/checkout";
8
+ export { deleteConfig, getAllConfig, getConfig, getInstalledPreferredEditors, getPreferredEditorCommand, getSettableConfigKeys, isCommandAvailable, normalizeAnvilUrl, parseConfigSetValue, preferredEditors, PreferredEditor, resetConfig, resolveAnvilUrl, setConfig, SettableConfigKey, } from "./config";
9
+ export { BranchSyncStatus, validateAnvilApp, validateBranchSyncStatus } from "./services/validation";
10
+ export interface UncommittedChanges {
11
+ hasChanges: boolean;
12
+ modified: string[];
13
+ notAdded: string[];
14
+ created: string[];
15
+ deleted: string[];
16
+ staged: string[];
17
+ }
18
+ export type WatchError = AuthError | GitError | ValidationServiceError;
19
+ /**
20
+ * Check for uncommitted changes in a repository.
21
+ * @throws {GitError} if git command fails
22
+ */
23
+ export declare function checkUncommittedChanges(repoPath: string): Promise<UncommittedChanges>;
24
+ /**
25
+ * Sync to the latest version from Anvil.
26
+ * Creates a temporary WatchSession to perform the sync.
27
+ * @throws {AnvilError} on failure
28
+ */
29
+ export declare function syncToLatest(repoPath: string, appId: string, anvilUrl: string, authToken: string, currentBranch: string, username?: string): Promise<string>;
30
+ /**
31
+ * Create and initialize a watch session for syncing with Anvil.
32
+ * @throws {WatchError} on failure
33
+ */
34
+ export declare function watch(repoPath: string, appId: string, anvilUrl?: string, stagedOnly?: boolean, username?: string): Promise<WatchSession>;
35
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAkB,QAAQ,EAAgB,MAAM,UAAU,CAAC;AAG7E,OAAO,EAA4B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzF,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,aAAa,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,KAAK,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,SAAS,EACT,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,eAAe,EACf,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAQrG,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,sBAAsB,CAAC;AAMvE;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB3F;AAMD;;;;GAIG;AACH,wBAAsB,YAAY,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAMD;;;GAGG;AACH,wBAAsB,KAAK,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,SAAoB,EAC5B,UAAU,UAAQ,EAClB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAmGvB"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export { buildProgram } from "./program";
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}