@local-labs-jpollock/local-cli 0.0.1

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/addon-dist/bin/mcp-stdio.js +2808 -0
  2. package/addon-dist/lib/common/constants.d.ts +22 -0
  3. package/addon-dist/lib/common/constants.js +26 -0
  4. package/addon-dist/lib/common/theme.d.ts +68 -0
  5. package/addon-dist/lib/common/theme.js +126 -0
  6. package/addon-dist/lib/common/types.d.ts +298 -0
  7. package/addon-dist/lib/common/types.js +6 -0
  8. package/addon-dist/lib/main/config/ConnectionInfo.d.ts +25 -0
  9. package/addon-dist/lib/main/config/ConnectionInfo.js +82 -0
  10. package/addon-dist/lib/main/index.d.ts +12 -0
  11. package/addon-dist/lib/main/index.js +3322 -0
  12. package/addon-dist/lib/main/mcp/McpAuth.d.ts +37 -0
  13. package/addon-dist/lib/main/mcp/McpAuth.js +87 -0
  14. package/addon-dist/lib/main/mcp/McpServer.d.ts +67 -0
  15. package/addon-dist/lib/main/mcp/McpServer.js +343 -0
  16. package/addon-dist/lib/main/mcp/tools/changePhpVersion.d.ts +7 -0
  17. package/addon-dist/lib/main/mcp/tools/changePhpVersion.js +81 -0
  18. package/addon-dist/lib/main/mcp/tools/cloneSite.d.ts +7 -0
  19. package/addon-dist/lib/main/mcp/tools/cloneSite.js +66 -0
  20. package/addon-dist/lib/main/mcp/tools/createSite.d.ts +7 -0
  21. package/addon-dist/lib/main/mcp/tools/createSite.js +137 -0
  22. package/addon-dist/lib/main/mcp/tools/deleteSite.d.ts +7 -0
  23. package/addon-dist/lib/main/mcp/tools/deleteSite.js +72 -0
  24. package/addon-dist/lib/main/mcp/tools/exportDatabase.d.ts +7 -0
  25. package/addon-dist/lib/main/mcp/tools/exportDatabase.js +72 -0
  26. package/addon-dist/lib/main/mcp/tools/exportSite.d.ts +7 -0
  27. package/addon-dist/lib/main/mcp/tools/exportSite.js +103 -0
  28. package/addon-dist/lib/main/mcp/tools/getLocalInfo.d.ts +7 -0
  29. package/addon-dist/lib/main/mcp/tools/getLocalInfo.js +72 -0
  30. package/addon-dist/lib/main/mcp/tools/getSite.d.ts +7 -0
  31. package/addon-dist/lib/main/mcp/tools/getSite.js +68 -0
  32. package/addon-dist/lib/main/mcp/tools/getSiteLogs.d.ts +7 -0
  33. package/addon-dist/lib/main/mcp/tools/getSiteLogs.js +149 -0
  34. package/addon-dist/lib/main/mcp/tools/helpers.d.ts +59 -0
  35. package/addon-dist/lib/main/mcp/tools/helpers.js +179 -0
  36. package/addon-dist/lib/main/mcp/tools/importDatabase.d.ts +7 -0
  37. package/addon-dist/lib/main/mcp/tools/importDatabase.js +109 -0
  38. package/addon-dist/lib/main/mcp/tools/importSite.d.ts +7 -0
  39. package/addon-dist/lib/main/mcp/tools/importSite.js +149 -0
  40. package/addon-dist/lib/main/mcp/tools/index.d.ts +26 -0
  41. package/addon-dist/lib/main/mcp/tools/index.js +117 -0
  42. package/addon-dist/lib/main/mcp/tools/listBlueprints.d.ts +7 -0
  43. package/addon-dist/lib/main/mcp/tools/listBlueprints.js +54 -0
  44. package/addon-dist/lib/main/mcp/tools/listServices.d.ts +7 -0
  45. package/addon-dist/lib/main/mcp/tools/listServices.js +112 -0
  46. package/addon-dist/lib/main/mcp/tools/listSites.d.ts +7 -0
  47. package/addon-dist/lib/main/mcp/tools/listSites.js +62 -0
  48. package/addon-dist/lib/main/mcp/tools/openAdminer.d.ts +7 -0
  49. package/addon-dist/lib/main/mcp/tools/openAdminer.js +59 -0
  50. package/addon-dist/lib/main/mcp/tools/openSite.d.ts +7 -0
  51. package/addon-dist/lib/main/mcp/tools/openSite.js +62 -0
  52. package/addon-dist/lib/main/mcp/tools/renameSite.d.ts +7 -0
  53. package/addon-dist/lib/main/mcp/tools/renameSite.js +70 -0
  54. package/addon-dist/lib/main/mcp/tools/restartSite.d.ts +7 -0
  55. package/addon-dist/lib/main/mcp/tools/restartSite.js +56 -0
  56. package/addon-dist/lib/main/mcp/tools/saveBlueprint.d.ts +7 -0
  57. package/addon-dist/lib/main/mcp/tools/saveBlueprint.js +89 -0
  58. package/addon-dist/lib/main/mcp/tools/startSite.d.ts +7 -0
  59. package/addon-dist/lib/main/mcp/tools/startSite.js +54 -0
  60. package/addon-dist/lib/main/mcp/tools/stopSite.d.ts +7 -0
  61. package/addon-dist/lib/main/mcp/tools/stopSite.js +54 -0
  62. package/addon-dist/lib/main/mcp/tools/toggleXdebug.d.ts +7 -0
  63. package/addon-dist/lib/main/mcp/tools/toggleXdebug.js +69 -0
  64. package/addon-dist/lib/main/mcp/tools/trustSsl.d.ts +7 -0
  65. package/addon-dist/lib/main/mcp/tools/trustSsl.js +59 -0
  66. package/addon-dist/lib/main/mcp/tools/wpCli.d.ts +7 -0
  67. package/addon-dist/lib/main/mcp/tools/wpCli.js +110 -0
  68. package/addon-dist/lib/main.d.ts +1 -0
  69. package/addon-dist/lib/main.js +10 -0
  70. package/addon-dist/lib/renderer/index.d.ts +7 -0
  71. package/addon-dist/lib/renderer/index.js +479 -0
  72. package/addon-dist/package.json +73 -0
  73. package/bin/lwp.js +10 -0
  74. package/lib/bootstrap/index.d.ts +98 -0
  75. package/lib/bootstrap/index.js +493 -0
  76. package/lib/bootstrap/paths.d.ts +28 -0
  77. package/lib/bootstrap/paths.js +96 -0
  78. package/lib/client/GraphQLClient.d.ts +38 -0
  79. package/lib/client/GraphQLClient.js +71 -0
  80. package/lib/client/index.d.ts +4 -0
  81. package/lib/client/index.js +10 -0
  82. package/lib/formatters/index.d.ts +75 -0
  83. package/lib/formatters/index.js +139 -0
  84. package/lib/index.d.ts +8 -0
  85. package/lib/index.js +1173 -0
  86. package/package.json +72 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Platform-specific paths for Local
3
+ *
4
+ * The CLI talks directly to Local's GraphQL server - no addon required for basic operations.
5
+ * The addon extends GraphQL with additional operations (backups, WPE sync, etc.)
6
+ */
7
+ export interface LocalPaths {
8
+ /** Local application data directory */
9
+ dataDir: string;
10
+ /** Addons installation directory */
11
+ addonsDir: string;
12
+ /** enabled-addons.json file path */
13
+ enabledAddonsFile: string;
14
+ /** GraphQL connection info file path (Local's native GraphQL server) */
15
+ graphqlConnectionInfoFile: string;
16
+ /** Local application executable path */
17
+ appExecutable: string;
18
+ /** Local application name (for process detection) */
19
+ appName: string;
20
+ }
21
+ /**
22
+ * Get platform-specific paths for Local
23
+ */
24
+ export declare function getLocalPaths(): LocalPaths;
25
+ /**
26
+ * Get the addon package name
27
+ */
28
+ export declare const ADDON_PACKAGE_NAME = "@local-labs-jpollock/local-addon-cli";
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Platform-specific paths for Local
4
+ *
5
+ * The CLI talks directly to Local's GraphQL server - no addon required for basic operations.
6
+ * The addon extends GraphQL with additional operations (backups, WPE sync, etc.)
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.ADDON_PACKAGE_NAME = void 0;
43
+ exports.getLocalPaths = getLocalPaths;
44
+ const os = __importStar(require("os"));
45
+ const path = __importStar(require("path"));
46
+ /**
47
+ * Get platform-specific paths for Local
48
+ */
49
+ function getLocalPaths() {
50
+ const platform = process.platform;
51
+ const home = os.homedir();
52
+ switch (platform) {
53
+ case 'darwin': {
54
+ const dataDir = path.join(home, 'Library', 'Application Support', 'Local');
55
+ return {
56
+ dataDir,
57
+ addonsDir: path.join(dataDir, 'addons'),
58
+ enabledAddonsFile: path.join(dataDir, 'enabled-addons.json'),
59
+ graphqlConnectionInfoFile: path.join(dataDir, 'graphql-connection-info.json'),
60
+ appExecutable: '/Applications/Local.app',
61
+ appName: 'Local',
62
+ };
63
+ }
64
+ case 'win32': {
65
+ const appData = process.env.APPDATA || path.join(home, 'AppData', 'Roaming');
66
+ const dataDir = path.join(appData, 'Local');
67
+ const programFiles = process.env['ProgramFiles'] || 'C:\\Program Files';
68
+ return {
69
+ dataDir,
70
+ addonsDir: path.join(dataDir, 'addons'),
71
+ enabledAddonsFile: path.join(dataDir, 'enabled-addons.json'),
72
+ graphqlConnectionInfoFile: path.join(dataDir, 'graphql-connection-info.json'),
73
+ appExecutable: path.join(programFiles, 'Local', 'Local.exe'),
74
+ appName: 'Local.exe',
75
+ };
76
+ }
77
+ case 'linux': {
78
+ const dataDir = path.join(home, '.config', 'Local');
79
+ return {
80
+ dataDir,
81
+ addonsDir: path.join(dataDir, 'addons'),
82
+ enabledAddonsFile: path.join(dataDir, 'enabled-addons.json'),
83
+ graphqlConnectionInfoFile: path.join(dataDir, 'graphql-connection-info.json'),
84
+ appExecutable: '/opt/Local/local',
85
+ appName: 'local',
86
+ };
87
+ }
88
+ default:
89
+ throw new Error(`Unsupported platform: ${platform}`);
90
+ }
91
+ }
92
+ /**
93
+ * Get the addon package name
94
+ */
95
+ exports.ADDON_PACKAGE_NAME = '@local-labs-jpollock/local-addon-cli';
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYm9vdHN0cmFwL3BhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUJILHNDQThDQztBQW5FRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBaUI3Qjs7R0FFRztBQUNILFNBQWdCLGFBQWE7SUFDM0IsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNsQyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFMUIsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDM0UsT0FBTztnQkFDTCxPQUFPO2dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7Z0JBQ3ZDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDO2dCQUM1RCx5QkFBeUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw4QkFBOEIsQ0FBQztnQkFDN0UsYUFBYSxFQUFFLHlCQUF5QjtnQkFDeEMsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDN0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztZQUN4RSxPQUFPO2dCQUNMLE9BQU87Z0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztnQkFDdkMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUM7Z0JBQzVELHlCQUF5QixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDhCQUE4QixDQUFDO2dCQUM3RSxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQztnQkFDNUQsT0FBTyxFQUFFLFdBQVc7YUFDckIsQ0FBQztRQUNKLENBQUM7UUFFRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDcEQsT0FBTztnQkFDTCxPQUFPO2dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7Z0JBQ3ZDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDO2dCQUM1RCx5QkFBeUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSw4QkFBOEIsQ0FBQztnQkFDN0UsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQztRQUNKLENBQUM7UUFFRDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztBQUNILENBQUM7QUFFRDs7R0FFRztBQUNVLFFBQUEsa0JBQWtCLEdBQUcsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBsYXRmb3JtLXNwZWNpZmljIHBhdGhzIGZvciBMb2NhbFxuICpcbiAqIFRoZSBDTEkgdGFsa3MgZGlyZWN0bHkgdG8gTG9jYWwncyBHcmFwaFFMIHNlcnZlciAtIG5vIGFkZG9uIHJlcXVpcmVkIGZvciBiYXNpYyBvcGVyYXRpb25zLlxuICogVGhlIGFkZG9uIGV4dGVuZHMgR3JhcGhRTCB3aXRoIGFkZGl0aW9uYWwgb3BlcmF0aW9ucyAoYmFja3VwcywgV1BFIHN5bmMsIGV0Yy4pXG4gKi9cblxuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFBhdGhzIHtcbiAgLyoqIExvY2FsIGFwcGxpY2F0aW9uIGRhdGEgZGlyZWN0b3J5ICovXG4gIGRhdGFEaXI6IHN0cmluZztcbiAgLyoqIEFkZG9ucyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5ICovXG4gIGFkZG9uc0Rpcjogc3RyaW5nO1xuICAvKiogZW5hYmxlZC1hZGRvbnMuanNvbiBmaWxlIHBhdGggKi9cbiAgZW5hYmxlZEFkZG9uc0ZpbGU6IHN0cmluZztcbiAgLyoqIEdyYXBoUUwgY29ubmVjdGlvbiBpbmZvIGZpbGUgcGF0aCAoTG9jYWwncyBuYXRpdmUgR3JhcGhRTCBzZXJ2ZXIpICovXG4gIGdyYXBocWxDb25uZWN0aW9uSW5mb0ZpbGU6IHN0cmluZztcbiAgLyoqIExvY2FsIGFwcGxpY2F0aW9uIGV4ZWN1dGFibGUgcGF0aCAqL1xuICBhcHBFeGVjdXRhYmxlOiBzdHJpbmc7XG4gIC8qKiBMb2NhbCBhcHBsaWNhdGlvbiBuYW1lIChmb3IgcHJvY2VzcyBkZXRlY3Rpb24pICovXG4gIGFwcE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXQgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aHMgZm9yIExvY2FsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbFBhdGhzKCk6IExvY2FsUGF0aHMge1xuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm07XG4gIGNvbnN0IGhvbWUgPSBvcy5ob21lZGlyKCk7XG5cbiAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgIGNhc2UgJ2Rhcndpbic6IHtcbiAgICAgIGNvbnN0IGRhdGFEaXIgPSBwYXRoLmpvaW4oaG9tZSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdMb2NhbCcpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgYWRkb25zRGlyOiBwYXRoLmpvaW4oZGF0YURpciwgJ2FkZG9ucycpLFxuICAgICAgICBlbmFibGVkQWRkb25zRmlsZTogcGF0aC5qb2luKGRhdGFEaXIsICdlbmFibGVkLWFkZG9ucy5qc29uJyksXG4gICAgICAgIGdyYXBocWxDb25uZWN0aW9uSW5mb0ZpbGU6IHBhdGguam9pbihkYXRhRGlyLCAnZ3JhcGhxbC1jb25uZWN0aW9uLWluZm8uanNvbicpLFxuICAgICAgICBhcHBFeGVjdXRhYmxlOiAnL0FwcGxpY2F0aW9ucy9Mb2NhbC5hcHAnLFxuICAgICAgICBhcHBOYW1lOiAnTG9jYWwnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlICd3aW4zMic6IHtcbiAgICAgIGNvbnN0IGFwcERhdGEgPSBwcm9jZXNzLmVudi5BUFBEQVRBIHx8IHBhdGguam9pbihob21lLCAnQXBwRGF0YScsICdSb2FtaW5nJyk7XG4gICAgICBjb25zdCBkYXRhRGlyID0gcGF0aC5qb2luKGFwcERhdGEsICdMb2NhbCcpO1xuICAgICAgY29uc3QgcHJvZ3JhbUZpbGVzID0gcHJvY2Vzcy5lbnZbJ1Byb2dyYW1GaWxlcyddIHx8ICdDOlxcXFxQcm9ncmFtIEZpbGVzJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGFkZG9uc0RpcjogcGF0aC5qb2luKGRhdGFEaXIsICdhZGRvbnMnKSxcbiAgICAgICAgZW5hYmxlZEFkZG9uc0ZpbGU6IHBhdGguam9pbihkYXRhRGlyLCAnZW5hYmxlZC1hZGRvbnMuanNvbicpLFxuICAgICAgICBncmFwaHFsQ29ubmVjdGlvbkluZm9GaWxlOiBwYXRoLmpvaW4oZGF0YURpciwgJ2dyYXBocWwtY29ubmVjdGlvbi1pbmZvLmpzb24nKSxcbiAgICAgICAgYXBwRXhlY3V0YWJsZTogcGF0aC5qb2luKHByb2dyYW1GaWxlcywgJ0xvY2FsJywgJ0xvY2FsLmV4ZScpLFxuICAgICAgICBhcHBOYW1lOiAnTG9jYWwuZXhlJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSAnbGludXgnOiB7XG4gICAgICBjb25zdCBkYXRhRGlyID0gcGF0aC5qb2luKGhvbWUsICcuY29uZmlnJywgJ0xvY2FsJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBhZGRvbnNEaXI6IHBhdGguam9pbihkYXRhRGlyLCAnYWRkb25zJyksXG4gICAgICAgIGVuYWJsZWRBZGRvbnNGaWxlOiBwYXRoLmpvaW4oZGF0YURpciwgJ2VuYWJsZWQtYWRkb25zLmpzb24nKSxcbiAgICAgICAgZ3JhcGhxbENvbm5lY3Rpb25JbmZvRmlsZTogcGF0aC5qb2luKGRhdGFEaXIsICdncmFwaHFsLWNvbm5lY3Rpb24taW5mby5qc29uJyksXG4gICAgICAgIGFwcEV4ZWN1dGFibGU6ICcvb3B0L0xvY2FsL2xvY2FsJyxcbiAgICAgICAgYXBwTmFtZTogJ2xvY2FsJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgcGxhdGZvcm06ICR7cGxhdGZvcm19YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIGFkZG9uIHBhY2thZ2UgbmFtZVxuICovXG5leHBvcnQgY29uc3QgQURET05fUEFDS0FHRV9OQU1FID0gJ0Bsb2NhbC1sYWJzLWpwb2xsb2NrL2xvY2FsLWFkZG9uLWNsaSc7XG4iXX0=
@@ -0,0 +1,38 @@
1
+ /**
2
+ * GraphQL Client
3
+ *
4
+ * Simple GraphQL client for communicating with Local's GraphQL server.
5
+ */
6
+ import { ConnectionInfo } from '../bootstrap';
7
+ export interface GraphQLError {
8
+ message: string;
9
+ locations?: Array<{
10
+ line: number;
11
+ column: number;
12
+ }>;
13
+ path?: string[];
14
+ }
15
+ export interface GraphQLResponse<T = unknown> {
16
+ data?: T;
17
+ errors?: GraphQLError[];
18
+ }
19
+ export declare class GraphQLClientError extends Error {
20
+ errors?: GraphQLError[] | undefined;
21
+ constructor(message: string, errors?: GraphQLError[] | undefined);
22
+ }
23
+ export declare class GraphQLClient {
24
+ private url;
25
+ private authToken;
26
+ private timeout;
27
+ constructor(connectionInfo: ConnectionInfo, options?: {
28
+ timeout?: number;
29
+ });
30
+ /**
31
+ * Execute a GraphQL query or mutation
32
+ */
33
+ query<T = unknown>(query: string, variables?: Record<string, unknown>): Promise<T>;
34
+ /**
35
+ * Execute a mutation (alias for query, for clarity)
36
+ */
37
+ mutate<T = unknown>(mutation: string, variables?: Record<string, unknown>): Promise<T>;
38
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * GraphQL Client
4
+ *
5
+ * Simple GraphQL client for communicating with Local's GraphQL server.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.GraphQLClient = exports.GraphQLClientError = void 0;
9
+ class GraphQLClientError extends Error {
10
+ constructor(message, errors) {
11
+ super(message);
12
+ this.errors = errors;
13
+ this.name = 'GraphQLClientError';
14
+ }
15
+ }
16
+ exports.GraphQLClientError = GraphQLClientError;
17
+ class GraphQLClient {
18
+ constructor(connectionInfo, options = {}) {
19
+ this.url = connectionInfo.url;
20
+ this.authToken = connectionInfo.authToken;
21
+ this.timeout = options.timeout || 30000;
22
+ }
23
+ /**
24
+ * Execute a GraphQL query or mutation
25
+ */
26
+ async query(query, variables = {}) {
27
+ const controller = new AbortController();
28
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
29
+ try {
30
+ const response = await fetch(this.url, {
31
+ method: 'POST',
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ Authorization: `Bearer ${this.authToken}`,
35
+ },
36
+ body: JSON.stringify({ query, variables }),
37
+ signal: controller.signal,
38
+ });
39
+ clearTimeout(timeoutId);
40
+ if (!response.ok) {
41
+ throw new GraphQLClientError(`HTTP ${response.status}: ${response.statusText}`);
42
+ }
43
+ const result = (await response.json());
44
+ if (result.errors && result.errors.length > 0) {
45
+ throw new GraphQLClientError(result.errors[0].message, result.errors);
46
+ }
47
+ if (!result.data) {
48
+ throw new GraphQLClientError('No data in response');
49
+ }
50
+ return result.data;
51
+ }
52
+ catch (error) {
53
+ clearTimeout(timeoutId);
54
+ if (error.name === 'AbortError') {
55
+ throw new GraphQLClientError('Request timed out');
56
+ }
57
+ if (error instanceof GraphQLClientError) {
58
+ throw error;
59
+ }
60
+ throw new GraphQLClientError(error.message);
61
+ }
62
+ }
63
+ /**
64
+ * Execute a mutation (alias for query, for clarity)
65
+ */
66
+ async mutate(mutation, variables = {}) {
67
+ return this.query(mutation, variables);
68
+ }
69
+ }
70
+ exports.GraphQLClient = GraphQLClient;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhRTENsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvR3JhcGhRTENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBZUgsTUFBYSxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDLFlBQ0UsT0FBZSxFQUNSLE1BQXVCO1FBRTlCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZSLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBRzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBUkQsZ0RBUUM7QUFFRCxNQUFhLGFBQWE7SUFLeEIsWUFBWSxjQUE4QixFQUFFLFVBQWdDLEVBQUU7UUFDNUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxLQUFLLENBQ1QsS0FBYSxFQUNiLFlBQXFDLEVBQUU7UUFFdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRSxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNyQyxNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtvQkFDbEMsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDMUM7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzFDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTthQUMxQixDQUFDLENBQUM7WUFFSCxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLGtCQUFrQixDQUFDLFFBQVEsUUFBUSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNsRixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBdUIsQ0FBQztZQUU3RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUVELElBQUksS0FBSyxZQUFZLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztZQUVELE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQ1YsUUFBZ0IsRUFDaEIsWUFBcUMsRUFBRTtRQUV2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQXpFRCxzQ0F5RUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdyYXBoUUwgQ2xpZW50XG4gKlxuICogU2ltcGxlIEdyYXBoUUwgY2xpZW50IGZvciBjb21tdW5pY2F0aW5nIHdpdGggTG9jYWwncyBHcmFwaFFMIHNlcnZlci5cbiAqL1xuXG5pbXBvcnQgeyBDb25uZWN0aW9uSW5mbyB9IGZyb20gJy4uL2Jvb3RzdHJhcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhRTEVycm9yIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBsb2NhdGlvbnM/OiBBcnJheTx7IGxpbmU6IG51bWJlcjsgY29sdW1uOiBudW1iZXIgfT47XG4gIHBhdGg/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmFwaFFMUmVzcG9uc2U8VCA9IHVua25vd24+IHtcbiAgZGF0YT86IFQ7XG4gIGVycm9ycz86IEdyYXBoUUxFcnJvcltdO1xufVxuXG5leHBvcnQgY2xhc3MgR3JhcGhRTENsaWVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIGVycm9ycz86IEdyYXBoUUxFcnJvcltdXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdHcmFwaFFMQ2xpZW50RXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaFFMQ2xpZW50IHtcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSBhdXRoVG9rZW46IHN0cmluZztcbiAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbkluZm86IENvbm5lY3Rpb25JbmZvLCBvcHRpb25zOiB7IHRpbWVvdXQ/OiBudW1iZXIgfSA9IHt9KSB7XG4gICAgdGhpcy51cmwgPSBjb25uZWN0aW9uSW5mby51cmw7XG4gICAgdGhpcy5hdXRoVG9rZW4gPSBjb25uZWN0aW9uSW5mby5hdXRoVG9rZW47XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0IHx8IDMwMDAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBHcmFwaFFMIHF1ZXJ5IG9yIG11dGF0aW9uXG4gICAqL1xuICBhc3luYyBxdWVyeTxUID0gdW5rbm93bj4oXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGhpcy50aW1lb3V0KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMudXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hdXRoVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBxdWVyeSwgdmFyaWFibGVzIH0pLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBHcmFwaFFMQ2xpZW50RXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIEdyYXBoUUxSZXNwb25zZTxUPjtcblxuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMgJiYgcmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBHcmFwaFFMQ2xpZW50RXJyb3IocmVzdWx0LmVycm9yc1swXS5tZXNzYWdlLCByZXN1bHQuZXJyb3JzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXN1bHQuZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhRTENsaWVudEVycm9yKCdObyBkYXRhIGluIHJlc3BvbnNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICB0aHJvdyBuZXcgR3JhcGhRTENsaWVudEVycm9yKCdSZXF1ZXN0IHRpbWVkIG91dCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBHcmFwaFFMQ2xpZW50RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBHcmFwaFFMQ2xpZW50RXJyb3IoZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBtdXRhdGlvbiAoYWxpYXMgZm9yIHF1ZXJ5LCBmb3IgY2xhcml0eSlcbiAgICovXG4gIGFzeW5jIG11dGF0ZTxUID0gdW5rbm93bj4oXG4gICAgbXV0YXRpb246IHN0cmluZyxcbiAgICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnk8VD4obXV0YXRpb24sIHZhcmlhYmxlcyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Client exports
3
+ */
4
+ export { GraphQLClient, GraphQLClientError, GraphQLError } from './GraphQLClient';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Client exports
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GraphQLClientError = exports.GraphQLClient = void 0;
7
+ var GraphQLClient_1 = require("./GraphQLClient");
8
+ Object.defineProperty(exports, "GraphQLClient", { enumerable: true, get: function () { return GraphQLClient_1.GraphQLClient; } });
9
+ Object.defineProperty(exports, "GraphQLClientError", { enumerable: true, get: function () { return GraphQLClient_1.GraphQLClientError; } });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBRUgsaURBQWtGO0FBQXpFLDhHQUFBLGFBQWEsT0FBQTtBQUFFLG1IQUFBLGtCQUFrQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDbGllbnQgZXhwb3J0c1xuICovXG5cbmV4cG9ydCB7IEdyYXBoUUxDbGllbnQsIEdyYXBoUUxDbGllbnRFcnJvciwgR3JhcGhRTEVycm9yIH0gZnJvbSAnLi9HcmFwaFFMQ2xpZW50JztcbiJdfQ==
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Output Formatters
3
+ *
4
+ * Format command output for different modes:
5
+ * - table: Human-readable ASCII tables (default)
6
+ * - json: JSON output for scripting
7
+ * - quiet: Minimal output (IDs/names only)
8
+ */
9
+ export type OutputFormat = 'table' | 'json' | 'quiet';
10
+ export interface FormatterOptions {
11
+ json?: boolean;
12
+ quiet?: boolean;
13
+ noColor?: boolean;
14
+ }
15
+ /**
16
+ * Get the output format from CLI options
17
+ */
18
+ export declare function getOutputFormat(options: FormatterOptions): OutputFormat;
19
+ /**
20
+ * Format data as a table
21
+ */
22
+ export declare function formatTable(headers: string[], rows: string[][], options?: {
23
+ noColor?: boolean;
24
+ }): string;
25
+ /**
26
+ * Format data as JSON
27
+ */
28
+ export declare function formatJson(data: unknown): string;
29
+ /**
30
+ * Format data as quiet output (one item per line)
31
+ */
32
+ export declare function formatQuiet(items: string[]): string;
33
+ /**
34
+ * Format a success message
35
+ */
36
+ export declare function formatSuccess(message: string, options?: {
37
+ noColor?: boolean;
38
+ }): string;
39
+ /**
40
+ * Format an error message
41
+ */
42
+ export declare function formatError(message: string, options?: {
43
+ noColor?: boolean;
44
+ }): string;
45
+ /**
46
+ * Format a warning message
47
+ */
48
+ export declare function formatWarning(message: string, options?: {
49
+ noColor?: boolean;
50
+ }): string;
51
+ /**
52
+ * Format a status badge
53
+ */
54
+ export declare function formatStatus(status: 'running' | 'stopped' | 'error' | string, options?: {
55
+ noColor?: boolean;
56
+ }): string;
57
+ /**
58
+ * Site formatter for list command
59
+ */
60
+ export interface SiteInfo {
61
+ id: string;
62
+ name: string;
63
+ domain: string;
64
+ status: string;
65
+ path?: string;
66
+ }
67
+ export declare function formatSiteList(sites: SiteInfo[], format: OutputFormat, options?: {
68
+ noColor?: boolean;
69
+ }): string;
70
+ /**
71
+ * Site detail formatter
72
+ */
73
+ export declare function formatSiteDetail(site: Record<string, unknown>, format: OutputFormat, options?: {
74
+ noColor?: boolean;
75
+ }): string;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * Output Formatters
4
+ *
5
+ * Format command output for different modes:
6
+ * - table: Human-readable ASCII tables (default)
7
+ * - json: JSON output for scripting
8
+ * - quiet: Minimal output (IDs/names only)
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.getOutputFormat = getOutputFormat;
15
+ exports.formatTable = formatTable;
16
+ exports.formatJson = formatJson;
17
+ exports.formatQuiet = formatQuiet;
18
+ exports.formatSuccess = formatSuccess;
19
+ exports.formatError = formatError;
20
+ exports.formatWarning = formatWarning;
21
+ exports.formatStatus = formatStatus;
22
+ exports.formatSiteList = formatSiteList;
23
+ exports.formatSiteDetail = formatSiteDetail;
24
+ const cli_table3_1 = __importDefault(require("cli-table3"));
25
+ const chalk_1 = __importDefault(require("chalk"));
26
+ /**
27
+ * Get the output format from CLI options
28
+ */
29
+ function getOutputFormat(options) {
30
+ if (options.json)
31
+ return 'json';
32
+ if (options.quiet)
33
+ return 'quiet';
34
+ return 'table';
35
+ }
36
+ /**
37
+ * Format data as a table
38
+ */
39
+ function formatTable(headers, rows, options = {}) {
40
+ const table = new cli_table3_1.default({
41
+ head: options.noColor ? headers : headers.map((h) => chalk_1.default.bold(h)),
42
+ style: {
43
+ head: options.noColor ? [] : ['cyan'],
44
+ border: options.noColor ? [] : ['grey'],
45
+ },
46
+ });
47
+ rows.forEach((row) => table.push(row));
48
+ return table.toString();
49
+ }
50
+ /**
51
+ * Format data as JSON
52
+ */
53
+ function formatJson(data) {
54
+ return JSON.stringify(data, null, 2);
55
+ }
56
+ /**
57
+ * Format data as quiet output (one item per line)
58
+ */
59
+ function formatQuiet(items) {
60
+ return items.join('\n');
61
+ }
62
+ /**
63
+ * Format a success message
64
+ */
65
+ function formatSuccess(message, options = {}) {
66
+ if (options.noColor) {
67
+ return `✓ ${message}`;
68
+ }
69
+ return chalk_1.default.green(`✓ ${message}`);
70
+ }
71
+ /**
72
+ * Format an error message
73
+ */
74
+ function formatError(message, options = {}) {
75
+ if (options.noColor) {
76
+ return `✗ ${message}`;
77
+ }
78
+ return chalk_1.default.red(`✗ ${message}`);
79
+ }
80
+ /**
81
+ * Format a warning message
82
+ */
83
+ function formatWarning(message, options = {}) {
84
+ if (options.noColor) {
85
+ return `⚠ ${message}`;
86
+ }
87
+ return chalk_1.default.yellow(`⚠ ${message}`);
88
+ }
89
+ /**
90
+ * Format a status badge
91
+ */
92
+ function formatStatus(status, options = {}) {
93
+ if (options.noColor) {
94
+ return status;
95
+ }
96
+ switch (status) {
97
+ case 'running':
98
+ return chalk_1.default.green(status);
99
+ case 'stopped':
100
+ return chalk_1.default.gray(status);
101
+ case 'error':
102
+ return chalk_1.default.red(status);
103
+ default:
104
+ return status;
105
+ }
106
+ }
107
+ function formatSiteList(sites, format, options = {}) {
108
+ switch (format) {
109
+ case 'json':
110
+ return formatJson(sites);
111
+ case 'quiet':
112
+ return formatQuiet(sites.map((s) => s.name));
113
+ case 'table':
114
+ default:
115
+ if (sites.length === 0) {
116
+ return 'No sites found.';
117
+ }
118
+ return formatTable(['Name', 'Domain', 'Status'], sites.map((s) => [s.name, s.domain, formatStatus(s.status, options)]), options);
119
+ }
120
+ }
121
+ /**
122
+ * Site detail formatter
123
+ */
124
+ function formatSiteDetail(site, format, options = {}) {
125
+ switch (format) {
126
+ case 'json':
127
+ return formatJson(site);
128
+ case 'quiet':
129
+ return String(site.name || site.id);
130
+ case 'table':
131
+ default:
132
+ const rows = Object.entries(site).map(([key, value]) => [
133
+ key,
134
+ typeof value === 'object' ? JSON.stringify(value) : String(value),
135
+ ]);
136
+ return formatTable(['Property', 'Value'], rows, options);
137
+ }
138
+ }
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZm9ybWF0dGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7Ozs7QUFnQkgsMENBSUM7QUFLRCxrQ0FnQkM7QUFLRCxnQ0FFQztBQUtELGtDQUVDO0FBS0Qsc0NBS0M7QUFLRCxrQ0FLQztBQUtELHNDQUtDO0FBS0Qsb0NBa0JDO0FBYUQsd0NBd0JDO0FBS0QsNENBcUJDO0FBektELDREQUErQjtBQUMvQixrREFBMEI7QUFVMUI7O0dBRUc7QUFDSCxTQUFnQixlQUFlLENBQUMsT0FBeUI7SUFDdkQsSUFBSSxPQUFPLENBQUMsSUFBSTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ2hDLElBQUksT0FBTyxDQUFDLEtBQUs7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNsQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLE9BQWlCLEVBQ2pCLElBQWdCLEVBQ2hCLFVBQWlDLEVBQUU7SUFFbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBSyxDQUFDO1FBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsS0FBSyxFQUFFO1lBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDckMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDeEM7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFdkMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLElBQWE7SUFDdEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQWU7SUFDekMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxPQUFlLEVBQUUsVUFBaUMsRUFBRTtJQUNoRixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQUssT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sZUFBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLE9BQWUsRUFBRSxVQUFpQyxFQUFFO0lBQzlFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBQ0QsT0FBTyxlQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQUMsT0FBZSxFQUFFLFVBQWlDLEVBQUU7SUFDaEYsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsT0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLGVBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsTUFBZ0QsRUFDaEQsVUFBaUMsRUFBRTtJQUVuQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssU0FBUztZQUNaLE9BQU8sZUFBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixLQUFLLFNBQVM7WUFDWixPQUFPLGVBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCO1lBQ0UsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFhRCxTQUFnQixjQUFjLENBQzVCLEtBQWlCLEVBQ2pCLE1BQW9CLEVBQ3BCLFVBQWlDLEVBQUU7SUFFbkMsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNCLEtBQUssT0FBTztZQUNWLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRS9DLEtBQUssT0FBTyxDQUFDO1FBQ2I7WUFDRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8saUJBQWlCLENBQUM7WUFDM0IsQ0FBQztZQUVELE9BQU8sV0FBVyxDQUNoQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQzVCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFDckUsT0FBTyxDQUNSLENBQUM7SUFDTixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLElBQTZCLEVBQzdCLE1BQW9CLEVBQ3BCLFVBQWlDLEVBQUU7SUFFbkMsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssTUFBTTtZQUNULE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFCLEtBQUssT0FBTztZQUNWLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLEtBQUssT0FBTyxDQUFDO1FBQ2I7WUFDRSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdEQsR0FBRztnQkFDSCxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDbEUsQ0FBQyxDQUFDO1lBRUgsT0FBTyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPdXRwdXQgRm9ybWF0dGVyc1xuICpcbiAqIEZvcm1hdCBjb21tYW5kIG91dHB1dCBmb3IgZGlmZmVyZW50IG1vZGVzOlxuICogLSB0YWJsZTogSHVtYW4tcmVhZGFibGUgQVNDSUkgdGFibGVzIChkZWZhdWx0KVxuICogLSBqc29uOiBKU09OIG91dHB1dCBmb3Igc2NyaXB0aW5nXG4gKiAtIHF1aWV0OiBNaW5pbWFsIG91dHB1dCAoSURzL25hbWVzIG9ubHkpXG4gKi9cblxuaW1wb3J0IFRhYmxlIGZyb20gJ2NsaS10YWJsZTMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuZXhwb3J0IHR5cGUgT3V0cHV0Rm9ybWF0ID0gJ3RhYmxlJyB8ICdqc29uJyB8ICdxdWlldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0dGVyT3B0aW9ucyB7XG4gIGpzb24/OiBib29sZWFuO1xuICBxdWlldD86IGJvb2xlYW47XG4gIG5vQ29sb3I/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3V0cHV0IGZvcm1hdCBmcm9tIENMSSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRGb3JtYXQob3B0aW9uczogRm9ybWF0dGVyT3B0aW9ucyk6IE91dHB1dEZvcm1hdCB7XG4gIGlmIChvcHRpb25zLmpzb24pIHJldHVybiAnanNvbic7XG4gIGlmIChvcHRpb25zLnF1aWV0KSByZXR1cm4gJ3F1aWV0JztcbiAgcmV0dXJuICd0YWJsZSc7XG59XG5cbi8qKlxuICogRm9ybWF0IGRhdGEgYXMgYSB0YWJsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGFibGUoXG4gIGhlYWRlcnM6IHN0cmluZ1tdLFxuICByb3dzOiBzdHJpbmdbXVtdLFxuICBvcHRpb25zOiB7IG5vQ29sb3I/OiBib29sZWFuIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGFibGUgPSBuZXcgVGFibGUoe1xuICAgIGhlYWQ6IG9wdGlvbnMubm9Db2xvciA/IGhlYWRlcnMgOiBoZWFkZXJzLm1hcCgoaCkgPT4gY2hhbGsuYm9sZChoKSksXG4gICAgc3R5bGU6IHtcbiAgICAgIGhlYWQ6IG9wdGlvbnMubm9Db2xvciA/IFtdIDogWydjeWFuJ10sXG4gICAgICBib3JkZXI6IG9wdGlvbnMubm9Db2xvciA/IFtdIDogWydncmV5J10sXG4gICAgfSxcbiAgfSk7XG5cbiAgcm93cy5mb3JFYWNoKChyb3cpID0+IHRhYmxlLnB1c2gocm93KSk7XG5cbiAgcmV0dXJuIHRhYmxlLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogRm9ybWF0IGRhdGEgYXMgSlNPTlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SnNvbihkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xufVxuXG4vKipcbiAqIEZvcm1hdCBkYXRhIGFzIHF1aWV0IG91dHB1dCAob25lIGl0ZW0gcGVyIGxpbmUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWlldChpdGVtczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gaXRlbXMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgc3VjY2VzcyBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgb3B0aW9uczogeyBub0NvbG9yPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmcge1xuICBpZiAob3B0aW9ucy5ub0NvbG9yKSB7XG4gICAgcmV0dXJuIGDinJMgJHttZXNzYWdlfWA7XG4gIH1cbiAgcmV0dXJuIGNoYWxrLmdyZWVuKGDinJMgJHttZXNzYWdlfWApO1xufVxuXG4vKipcbiAqIEZvcm1hdCBhbiBlcnJvciBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFcnJvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM6IHsgbm9Db2xvcj86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nIHtcbiAgaWYgKG9wdGlvbnMubm9Db2xvcikge1xuICAgIHJldHVybiBg4pyXICR7bWVzc2FnZX1gO1xuICB9XG4gIHJldHVybiBjaGFsay5yZWQoYOKclyAke21lc3NhZ2V9YCk7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgd2FybmluZyBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRXYXJuaW5nKG1lc3NhZ2U6IHN0cmluZywgb3B0aW9uczogeyBub0NvbG9yPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmcge1xuICBpZiAob3B0aW9ucy5ub0NvbG9yKSB7XG4gICAgcmV0dXJuIGDimqAgJHttZXNzYWdlfWA7XG4gIH1cbiAgcmV0dXJuIGNoYWxrLnllbGxvdyhg4pqgICR7bWVzc2FnZX1gKTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBzdGF0dXMgYmFkZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0YXR1cyhcbiAgc3RhdHVzOiAncnVubmluZycgfCAnc3RvcHBlZCcgfCAnZXJyb3InIHwgc3RyaW5nLFxuICBvcHRpb25zOiB7IG5vQ29sb3I/OiBib29sZWFuIH0gPSB7fVxuKTogc3RyaW5nIHtcbiAgaWYgKG9wdGlvbnMubm9Db2xvcikge1xuICAgIHJldHVybiBzdGF0dXM7XG4gIH1cblxuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ3J1bm5pbmcnOlxuICAgICAgcmV0dXJuIGNoYWxrLmdyZWVuKHN0YXR1cyk7XG4gICAgY2FzZSAnc3RvcHBlZCc6XG4gICAgICByZXR1cm4gY2hhbGsuZ3JheShzdGF0dXMpO1xuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIHJldHVybiBjaGFsay5yZWQoc3RhdHVzKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXR1cztcbiAgfVxufVxuXG4vKipcbiAqIFNpdGUgZm9ybWF0dGVyIGZvciBsaXN0IGNvbW1hbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaXRlSW5mbyB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZG9tYWluOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2l0ZUxpc3QoXG4gIHNpdGVzOiBTaXRlSW5mb1tdLFxuICBmb3JtYXQ6IE91dHB1dEZvcm1hdCxcbiAgb3B0aW9uczogeyBub0NvbG9yPzogYm9vbGVhbiB9ID0ge31cbik6IHN0cmluZyB7XG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAnanNvbic6XG4gICAgICByZXR1cm4gZm9ybWF0SnNvbihzaXRlcyk7XG5cbiAgICBjYXNlICdxdWlldCc6XG4gICAgICByZXR1cm4gZm9ybWF0UXVpZXQoc2l0ZXMubWFwKChzKSA9PiBzLm5hbWUpKTtcblxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNpdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gJ05vIHNpdGVzIGZvdW5kLic7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3JtYXRUYWJsZShcbiAgICAgICAgWydOYW1lJywgJ0RvbWFpbicsICdTdGF0dXMnXSxcbiAgICAgICAgc2l0ZXMubWFwKChzKSA9PiBbcy5uYW1lLCBzLmRvbWFpbiwgZm9ybWF0U3RhdHVzKHMuc3RhdHVzLCBvcHRpb25zKV0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICB9XG59XG5cbi8qKlxuICogU2l0ZSBkZXRhaWwgZm9ybWF0dGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTaXRlRGV0YWlsKFxuICBzaXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZm9ybWF0OiBPdXRwdXRGb3JtYXQsXG4gIG9wdGlvbnM6IHsgbm9Db2xvcj86IGJvb2xlYW4gfSA9IHt9XG4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ2pzb24nOlxuICAgICAgcmV0dXJuIGZvcm1hdEpzb24oc2l0ZSk7XG5cbiAgICBjYXNlICdxdWlldCc6XG4gICAgICByZXR1cm4gU3RyaW5nKHNpdGUubmFtZSB8fCBzaXRlLmlkKTtcblxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICBkZWZhdWx0OlxuICAgICAgY29uc3Qgcm93cyA9IE9iamVjdC5lbnRyaWVzKHNpdGUpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IFN0cmluZyh2YWx1ZSksXG4gICAgICBdKTtcblxuICAgICAgcmV0dXJuIGZvcm1hdFRhYmxlKFsnUHJvcGVydHknLCAnVmFsdWUnXSwgcm93cywgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
package/lib/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Local CLI (lwp)
4
+ *
5
+ * Command-line interface for managing Local WordPress sites.
6
+ * Connects directly to Local's GraphQL server.
7
+ */
8
+ export {};